/* DtWidget.js */ Ext.namespace("kw.widget.datatable"); (function() { var _view_, _input_, _schema_; kw.widget.datatable.VIEW_MODE = _view_ = 0; kw.widget.datatable.INPUT_MODE = _input_ = 1; kw.widget.datatable.SCHEMA_MODE = _schema_= 2; kw.widget.datatable.newColCounter = 0; kw.widget.datatable.IWidgetSurrogate = function(widget) { return { widget: widget, onSelect: widget.onSelect ? widget.onSelect.createDelegate(widget) : function() {}, onDeselect: widget.onDeselect ? widget.onDeselect.createDelegate(widget) : function() {}, onPageEdit: widget.onPageEdit ? widget.onPageEdit.createDelegate(widget) : function() {}, onPageSave: widget.onPageSave ? widget.onPageSave.createDelegate(widget) : function() {}, onPageEditCancel: widget.onPageEditCancel ? widget.onPageEditCancel.createDelegate(widget) : function() {}, onRemoveWidget: widget.onRemoveWidget ? widget.onRemoveWidget.createDelegate(widget) : function() {return true;}, canUpdateSelf: widget.canUpdateSelf ? widget.canUpdateSelf.createDelegate(widget) : function() {return true;}, onUpdate: widget.onUpdate ? widget.onUpdate.createDelegate(widget) : function() {}, getTitle: widget.getTitle ? widget.getTitle.createDelegate(widget) : function() {return " ";}, onWidgetMoved :widget.onWidgetMoved ? widget.onWidgetMoved.createDelegate(widget) : function() {} }; }; //////////////////////////////////////////// kw.widget.datatable.Field = function(config) { this.addEvents({"configupdate": true}); if (typeof config._fieldId != "undefined") this.dataIndex = config._fieldId; else this.dataIndex = "new_column_".concat(kw.widget.datatable.newColCounter++); this.mode = _view_; this.isKwDatatableField = true; if (config.isRequired) this.required = true; Ext.applyIf(config, {cls: "kw-dtfield"}); this.subscriptions =[]; this.subscriptions.push(kw.Events.subscribe(kw.EventNames.DeleteColumnBox, onColumnBoxDelete, this)); kw.widget.datatable.Field.superclass.constructor.call(this, config); }; Ext.extend(kw.widget.datatable.Field, Ext.form.Field, { deleteOnCancelInitialConfig: true, onDestroy: function() { if (this.rowControl) this.rowControl.removeField(this); Ext.each(this.subscriptions, kw.Events.unsubscribe); kw.widget.datatable.Field.superclass.onDestroy.apply(this, arguments); }, setMode: function(mode) { showRequired.call(this, (mode != _view_) && (this.required || this.isTitleColumn())); // KWC-7615 if( this.isTitleColumn() && mode != _view_) { kw.DatatableLib.setTitleWidget(this, true); } }, onRender: function(ct, pos) { kw.widget.datatable.Field.superclass.onRender.apply(this, arguments); this.el.addClass("kw-dtfield"); }, onUpdate: function(changed) { if (this.mode != _view_) { showRequired.call(this, this.required); } this.fireEvent("configupdate", this); }, isRequiredField: function() { return this.required; }, isTitleColumn: function() { return this.rowControl.getTitleColumn() == this.dataIndex; }, onCancelEdit: function() { this.showError(false); }, getFieldBinding : function() { if (this.portlet && this.portlet.ownerCt && this.portlet.ownerCt.bindings && this.portlet.ownerCt.bindings.length) { return this.portlet.ownerCt.bindings[0]; } return null; }, //this method will set this field as the data table title field in schema setAsTitle: function(state) { this.isTitleField = state; //need to set the required option to true for this widget field var binding = this.getFieldBinding(); if (binding) { var valParam = { isRequired: true }; binding.saveConfigParams(valParam); } kw.DatatableLib.setTitleWidget(this, state); }, showError: function(isError, tooltip) { kw.DatatableLib.setWidgetError(this, isError, tooltip); }, validate: function() { var rowControlMode = this.rowControl.getMode(); if (rowControlMode != kw.widget.datatable.VIEW_MODE){ if (!this.originalInputValidate()) { this.showError(true, this.input.getActiveError()); return false; } } if (rowControlMode == kw.widget.datatable.SCHEMA_MODE) { return this.schemaModeValidate(); } var isViewMode = (rowControlMode == kw.widget.datatable.VIEW_MODE); //KWC-8712 var hasValue = true; var v = this.getValue(); if (!v) { hasValue = false; } else if (Ext.isString(v)) { v = v.trim(); if (v.length == 0) hasValue = false; } else if (Ext.isArray(v)) { if (v.length == 0 || (v.length == 1 && Ext.isString(v[0]) && v[0].length == 0)) hasValue = false; } if (this.isTitleColumn() && !hasValue && !isViewMode) { this.showError(true, kw.Strings.Datatable.nameFieldRequired); return false; } else if (this.required && !hasValue && !isViewMode) { this.showError(true, kw.Strings.Datatable.fieldRequired); return false; } else { this.showError(false); return true; } }, schemaModeValidate: function() {return true;} // may have overrides }); function onColumnBoxDelete(evt, data) { if (!this.isTitleField) return; var matchIt = data.columnBox.id; var title = this.title; this.findParentBy(function(ct, fld) { if (ct.id == matchIt) { if (ct instanceof kw.widget.GroupBox) data.reason = String.format(kw.Strings.Datatable.cantDeleteGroupBox, title); else data.reason = String.format(kw.Strings.Datatable.cantDeleteColumnBox, title); data.canBeDeleted = false; return true; } }); } function addToForm() { var rc = this.rowControl = kw.widget.datatable.getRowControlForWidget(this); if (rc) { rc.addField(this); this.portlet.setWidgetTitle(Ext.util.Format.htmlEncode(rc.getFieldTitle(this.dataIndex))); this.portlet.addClass("kw-dt-widget"); this.portlet.header.addClass("kw-dt-widget-title"); } else kw.Util.debugHere("expected row control"); } function showRequired(state) { kw.DatatableLib.setWidgetRequired(this, state); } ///////////////////////////////////////////////////////////////////////////////// kw.widget.datatable.FieldPlugin = function(config) {}; kw.widget.datatable.FieldPlugin.prototype = { init: function(f) { f.fieldAdapter = this; f.isFormField = true; f.getName = adapterGetName; f.isRequiredField = this.isRequiredField.createDelegate(this); f.afterRender = f.constructor.prototype.afterRender.createSequence(this.afterRender.createDelegate(this)); f.isKwDatatableField = true; f.deleteOnCancelInitialConfig = true; f.cls = f.cls ? (f.cls + " kw-dtfield") : "kw-dtfield"; if (f.initialConfig.isRequired) f.required = true; this.field = f; if (typeof f.validate == "undefined") { f.validate = kw.widget.datatable.Field.prototype.validate; } if (typeof f.showError == "undefined") { f.showError = kw.widget.datatable.Field.prototype.showError; } if (typeof f.isTitleColumn == "undefined") { f.isTitleColumn = kw.widget.datatable.Field.prototype.isTitleColumn; } f.addEvents({"configupdate": true}); if (typeof f.initialConfig._fieldId != "undefined") f.dataIndex = f.initialConfig._fieldId; else f.dataIndex = "new_column_".concat(kw.widget.datatable.newColCounter++); this.mode = kw.widget.datatable.VIEW_MODE; f.setAsTitle = function(state) { kw.widget.datatable.Field.prototype.setAsTitle.call(f, state); }; f.getFieldBinding = function() { return kw.widget.datatable.Field.prototype.getFieldBinding.call(f); }; f.subscriptions = f.subscriptions || []; f.subscriptions.push(kw.Events.subscribe(kw.EventNames.DeleteColumnBox, onColumnBoxDelete, f)); if (!f.title && f.portlet) f.title = f.portlet.widgetTitle; }, onRender: function() { kw.widget.datatable.Field.prototype.onRender.apply(this.field, arguments); addToForm.call(this.field); }, setMode: function(mode) { this.mode = mode; kw.widget.datatable.Field.prototype.setMode.call(this.field, mode); }, onUpdate: function(changedParams) { if (typeof changedParams.isRequired != "undefined") showRequired.call(this.field, changedParams.isRequired); }, isRequiredField: function() { return this.field.required; }, afterRender: function() { this.field.initValue(); } }; function adapterGetName() { return this.title || ""; } //////////////////////////////////////////// kw.widget.datatable.SimpleField = function(config) { kw.widget.datatable.SimpleField.superclass.constructor.call(this, config); }; Ext.extend(kw.widget.datatable.SimpleField, kw.widget.datatable.Field, { beforeDestroy: function() { Ext.destroy(this.box); kw.widget.datatable.SimpleField.superclass.beforeDestroy.call(this); }, initValue: function() { if (this.rowControl.isSchemaPage()) this.setValue(this.initialConfig._defaultValue); else if (this.literalValue) this.value = this.literalValue; else this.value = ""; }, onRender: function(ct, pos) { if (this.title) this.portlet.setWidgetTitle(Ext.util.Format.htmlEncode(this.title)); kw.widget.datatable.SimpleField.superclass.onRender.apply(this, arguments); var newEl = Ext.DomHelper.append(this.el.parent(), {tag:"div", cls: "kw-dtfield"}); Ext.destroy(this.el); newEl.id = this.id; this.el = Ext.get(newEl); this.renderBox({items: this.getInitialRenderItems()}); addToForm.call(this); this.ownerCt.on("afterlayout", function() { this.box.doLayout(); }, this); this.setMode(this.rowControl.getMode(), true); }, showLiteral: function() { this.box.layout.setActiveItem(0); }, showInput: function() { this.box.layout.setActiveItem(1); }, renderBox: function(props) { var cfg = { autoEl: 'div', layout: 'card', renderTo: this.el }; Ext.applyIf(cfg, props); this.box = new Ext.Container(cfg); this.showLiteral(); }, getValue: function() { if ((this.mode == _input_) || (this.mode == _schema_)) return this.getInputValue(); else return this.getLiteralValue(); }, setValue: function(v) { this.value = v; if (this.mode == _view_) this.setLiteralValue(v); else this.setInputValue(v); }, setMode: function(mode, bTransferValue) { if ((this.mode == _input_) || (this.mode == _schema_)){ if (mode == _view_) { if (bTransferValue) { this.value = this.getInputValue(); this.setLiteralValue(this.value); } this.showLiteral(); } } else if (this.mode == _view_) { if ((mode == _input_) || (mode == _schema_)) { if (this.box.items.getCount() < 2) { this.input = this.addInputField(); if (this.input) { this.input.widget = this; this.originalInputValidate = this.input.validate.createDelegate(this.input); this.input.validate = this.validate.createDelegate(this); } } if (bTransferValue) { var inputValue = this.value; this.value = this.getLiteralValue(); this.setInputValue(inputValue); } this.showInput(); } } this.mode = mode; kw.widget.datatable.SimpleField.superclass.setMode.call(this, mode, bTransferValue); }, disable: function() { this.enable(false); }, enable: function(state) { if (typeof state == "undefined") state = true; this.disabled = !state; if (this.box.items.getCount() > 1) { var f = this.box.items.itemAt(1); if (state) f.enable(); else f.disable(); } }, addInputField: function() {abstractFn();}, getInitialRenderItems: function() {abstractFn();}, getLiteralValue: function() {abstractFn();}, setLiteralValue: function() {abstractFn();}, getInputValue: function() {abstractFn();}, setInputValue: function() {abstractFn();} }); function abstractFn() { kw.Util.debugHere("you must implement this method"); } rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/config/RequiredCheckbox.js"); })(); /* DatatableLib.js */ Ext.namespace("kw.DatatableLib"); (function() { //register metatypes function isDataTableRow(meta) { // dlm dt var t = meta.get("r_object_type"); return (t && t.indexOf("datatable_row") == 0); } /** * Datatable tree type adapter */ kw.DatatableLib.TreeHandler = Ext.extend(kw.widget.NavMapTypeHandler, { queryId: "tree_datatable_query", overLimitText: kw.Strings.Datatable.TableTreeOverLimit, childCountMessage: kw.Strings.nEntries, moreChildren: kw.Strings.nMoreEntries, /** * tree node expander for datatables (call scope the node) */ expand: function (cb, scope){ var tree = this.getOwnerTree(); kw.Util.debug("Handler expand: ", this.id); var rid=kw.widget.NavMap.getRidFromUniqueId(this.id); this.addLoadingCls(); var queryExecution = new QueryExecution(); queryExecution.startingIndex = 0; queryExecution.maxResultCount = kw.tuning.treeChildMax; var filter = new FilterInfo(); filter.parameters = [ {name: "datatable_id", value: rid }, {name: "space_id", value: tree.context.getSpaceId()}]; filter.execOptions = queryExecution; var parentNode = this; var callbackProxy = kw.getCallbackClosure(tree, function(data){ this.addChildrenToNode(parentNode, data, query, filter); cb.call(scope, parentNode); }, function _err_(errInfo){ parentNode.removeLoadingCls(); }); var query = { datalistId: this.getQueryId(), repositories: [tree.context.repository], context:kw.Util.getListQueryContainerContext(kw.widget.NavMap.getRidFromUniqueId(this.id)) }; var prefs = this._behaviors._getSortingPreferences(tree.context.repository, rid); var sort = null; if (prefs.DataTableSortField) { sort = [{ attribute: prefs.DataTableSortField, ascending: (prefs.DataTableSortOrder != "DESC") }]; }; ListService.fetchResults(query, filter, sort, callbackProxy); }, click: function() { var ctx = new kw.Context(this.getOwnerTree().context.getUrl()); ctx.id = this.id; if (kw.PagingToolbar.hasSavedGridPage(ctx.getUrl(), ctx.id, ctx.id)) { kw.PagingToolbar.clearSavedGridPage(); } return false; }, _getSortingPreferences: function(repo, dtId) { var ident = new ObjectIdentity(); ident.repositoryName = repo; ident.valueType = "OBJECT_ID"; ident.value = dtId; var prefSettings = { objIdentity: ident }; kw.Util.getPreferences(prefSettings); return prefSettings.preferences; } }); (function() { kw.DatatableLib.EntryTreeHandler = Ext.extend(kw.widget.NavMapTypeHandler, { showChildren:true, overLimitText: kw.Strings.Datatable.EntryTreeOverLimit, queryId: "entry_attachments", forceUpdateOnChildDeletion: true, click: function () { // returns true if the click has been handled // this === node var tree = this.getOwnerTree(); if (tree.tab.hasListener("dtentrytreenav")) return tree.tab.fireEvent("dtentrytreenav", this.id, _getEntryIndex(this), this.parentNode.id); else return false; }, getQueryParameters: function() { return [ {name: "row_id", value: this.id}, {name: "space_id", value: this.getOwnerTree().context.getSpaceProperties().get("r_object_id")} ]; }, hasChildNodes: function(metadata) { return !!metadata.get("_kw_is_row_attachments"); } }); function _getEntryIndex(node) { var p = node.parentNode; for (var i=0; i < p.childNodes.length; ++i) { if (p.childNodes[i].id == node.id) return i; } return -1; } })(); /** * Register Datatable types */ kw.MetaTypeUtil.register("DATATABLE", 109, "dmc_datatable", {canNonGov:false, isPage:true, iconCls:"kw-new-datatable", actionCls:"kw-am-DATATABLE", childTypes:[110 /*ROW*/, 109/*DATATABLE*/ , kw.MetaType.FOLDER, kw.MetaType.FILE, kw.MetaType.SECTION, kw.MetaType.DISCUSSION, kw.MetaType.BLOG, kw.MetaType.NONE, kw.MetaType.ROOM], viewNames: ["home", "attachments"], actions:{ "pastelink":true, "resumeedit":false, "saveastemplate":true }, handlers:{tree: new kw.DatatableLib.TreeHandler()} }); kw.MetaTypeUtil.register("ROW", 110, {fn: isDataTableRow}, {canNonGov:false, isPage:true, iconCls:"kw-new-datatable-row kw-action-icon", actionCls:"kw-am-ROW", childTypes:[kw.MetaType.FILE,kw.MetaType.FOLDER, kw.MetaType.DATATABLE, kw.MetaType.SECTION, kw.MetaType.DISCUSSION, kw.MetaType.BLOG, kw.MetaType.NONE, kw.MetaType.ROOM], parentType:kw.MetaType.DATATABLE, viewNames: ["parenthome"], actions:{ "pastelink":true, "rename": false, "move": false, "cut": false, "resumeedit":false }, handlers:{tree: new kw.DatatableLib.EntryTreeHandler()} }); kw.MetaTypeUtil.register("SCHEMA", 111, "dmc_datatable_schema", {isPage:true, iconCls:"", // dlm todo need icon class childTypes:[], viewNames: null, actions:{ "cut": false }}); kw.MetaTypeUtil.register("DTTEMPLATE", 204, {r_object_type: "dmc_kw_template", a_target_application_type: "dmc_datatable"}, {iconCls:"kw-new-datatable", childTypes:[], viewNames: null }); // add datatable as childtype of folder and space var typeinfo; typeinfo=kw.MetaTypeUtil.getTypeInfo(kw.MetaType.SPACE); typeinfo.childTypes.push(kw.MetaType.DATATABLE); typeinfo=kw.MetaTypeUtil.getTypeInfo(kw.MetaType.FOLDER); typeinfo.childTypes.push(kw.MetaType.DATATABLE); typeinfo=kw.MetaTypeUtil.getTypeInfo(kw.MetaType.CABINET); typeinfo.childTypes.push(kw.MetaType.DATATABLE); typeinfo=kw.MetaTypeUtil.getTypeInfo(kw.MetaType.ROOM); typeinfo.childTypes.push(kw.MetaType.DATATABLE); // add opStatusSet error translator // If all messages are the same, rollup to a single message. kw.ErrorTranslator.add(function(data){ if (data.messageId!="KW_E_COPY_MULTI_ITEM" && data.messageId!="KW_E_DATATABLE_E_LOCKED") return false; var ops=data.operationStatusSet; for (var i=0, len=ops.length; i1) kw.Util.debugHere("item is linked; bad assumption!"); objectIdentity.value = meta.get("i_folder_id")[0].id; } else if (metaType == kw.MetaType.SCHEMA) { kw.Util.debugHere("is schema"); objectIdentity.value = kw.Util.getQueryStringParam("datatableid", this.queryString); } else { throw new Error("Not a datatable related context!"); } var cache = null; if (!this._dtproperties){ if (cache = this.getCache()) this._dtproperties = cache.getById(objectIdentity.value); } if (!this._dtproperties) { var propertyConfig= {}; Ext.applyIf(propertyConfig, {objectIdentity:objectIdentity, profile:this.getContextPropertiesProfile()}); this._dtproperties = new kw.Properties(propertyConfig); } if (cache && this._dtproperties){ cache.add(this._dtproperties, objectIdentity.value); } this._dtproperties.load(true); return this._dtproperties; }, /** * Get fields for a datatable * Method is added to context; result is added to context metadata. */ getFields: function(){ var meta = this.getContextProperties(); var fields = meta.get("fieldsInfo"); if (fields) return fields; var datatableId = new ObjectIdentity(); datatableId.repositoryName = this.repository; datatableId.valueType = "OBJECT_ID"; var metaType = meta.getMetaType(); if (metaType == kw.MetaType.DATATABLE) { datatableId.value = meta.get("r_object_id"); } else if (metaType == kw.MetaType.ROW) { datatableId.value = meta.get("i_folder_id")[0].id; } else if (metaType == kw.MetaType.SCHEMA) { datatableId.value = kw.Util.getQueryStringParam("datatableid", this.queryString); } else { throw new Error("Not a datatable related context!"); } var config = {}; config.serviceMethod = ListService.fetchResults; var dtq = {}; dtq.repositories = [this.repository]; dtq.tableIdentity = new ObjectIdentity(); dtq.tableIdentity.repositoryName = this.repository; dtq.tableIdentity.value = datatableId.value; dtq.tableIdentity.valueType = "OBJECT_ID"; var filter = new FilterInfo(); filter.parameters = [{name: "table_id", value: datatableId.value}]; config.storeLoadParams = {serviceMethodParams: { dtQuery: dtq, filter:filter, sorting:null}, datalistId: datatableId.value}; meta._items["fieldsInfo"]=kw.data.getQueryMetadata(config).columnDefinition; return meta._items["fieldsInfo"]; } }); kw.DatatableLib.EditRow = function(actionArgs, rowControl) { var progress = {}; kw.Progress.ShowProgress(progress); function onCheckout(data) { bCheckOutSuccessful = (kw.ActionLib.handleStatusReturn(data) === true); if (bCheckOutSuccessful) { if(rowControl == undefined) { var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); rc.editRow(); } else { // We pass the rowControl from grid since it has a handler (see kw.Action.Datatable.EditEntryFromGrid) rowControl.editRow(); } kw.Progress.EndProgress(progress); } }; var objIdentity = new ObjectIdentity(); objIdentity.value = actionArgs.context.id; objIdentity.valueType = "OBJECT_ID"; objIdentity.repositoryName = actionArgs.context.repository; var idset = {identities:[objIdentity]}; var _error=function(excName,excObj){ kw.Util.debug("ERROR ContentService.checkout: "+ excObj.message); kw.Progress.EndProgress(progress); }; var callbacks = kw.getCallbackClosure(this, onCheckout, _error); callbacks.async=false; ContentService.checkout(idset, null, callbacks); }; kw.DatatableLib.navigateEditMode=function(context, callback, scope){ var activeTab = kw.RendEng.getTabManager().getActiveTab(); var navSubscription = null; navSubscription = kw.Events.subscribe(kw.EventNames.Navigated, function(name, navactionArgs) { var tabKey = navactionArgs.context.space; activeTab = kw.RendEng.getTabManager().lookupTab(tabKey); if (activeTab) activeTab.on(kw.EventNames.DeferredBinding, getEditRow, this, {single: true}); }, this); function getEditRow(){ var myTab = kw.RendEng.getTabManager().getActiveTab(); if (myTab) myTab.un(kw.EventNames.DeferredBinding, getEditRow, this); if (navSubscription) kw.Events.unsubscribe(navSubscription); var rc = kw.widget.datatable.getRowControl(myTab.el.dom); rc.on(kw.EventNames.EditPage, callback, scope, {single: true}); var newActionArgs = {context: context}; kw.DatatableLib.EditRow(newActionArgs, rc); } kw.RendEng.navigate(context); }; kw.DatatableLib.EditSchema = function (actionArgs) { var progress = {}; var schemaId, ctx; var metadata = actionArgs.context.getContextProperties(); var target = actionArgs.context.id; if (kw.Util.hasSelection(actionArgs)) { metadata = actionArgs.selection.items[0].metadata; target = metadata.get("r_object_id"); } if (!target) return; // Must lock the schema object before navigate to it for edit. function onCheckout(data) { var bCheckOutSuccessful = (kw.ActionLib.handleStatusReturn(data) === true); if (bCheckOutSuccessful) { var evtactionArgs = new kw.ActionArgs({ context: actionArgs.context.cloneContext(), metadata: new kw.MetaData({'r_object_id': target, 'r_lock_owner': kw.getCurrentMemberUserName()})}); kw.Events.publish(kw.EventNames.PageLocked, evtactionArgs); var ctx = actionArgs.context.getContext(metadata); ctx.id = schemaId; ctx.view = "content"; ctx.queryString = "?foredit=true&datatableid=" + target; kw.ActionLib.navigateCallback(ctx, function(){ kw.Progress.EndProgress(progress); },this); } } function schemaIdError(e) { kw.Progress.EndProgress(progress); throw new Error("can't get schema id for data table"); } function schemaCheckout(){ var schemaObjIdentity = new ObjectIdentity(); schemaObjIdentity.value = schemaId; schemaObjIdentity.valueType = "OBJECT_ID"; schemaObjIdentity.repositoryName = actionArgs.context.repository; var idset = {identities:[schemaObjIdentity]}; var _error=function(excName,excObj){ kw.Progress.EndProgress(progress); kw.Util.debug("ERROR ContentService.checkout: "+ excObj.message); }; var callbacks = kw.getCallbackClosure(this, onCheckout, _error); ContentService.checkout(idset, null, callbacks); } function gotSchemaId(result) { schemaId = result; ctx = actionArgs.context.getContext(metadata); ctx.id = schemaId; ctx.view = "content"; ctx.queryString = "?foredit=true&datatableid=" + target; var myTab = kw.RendEng.getTabManager().getActiveTab(); if (kw.widget.datatable.getRowControlForWidget){ var rc = kw.widget.datatable.getRowControl(myTab.el.dom); if (rc && (rc.state._isNewEntry || (rc.state._mode == kw.widget.datatable.INPUT_MODE))){ rc.addEvents("navhookbeforeschemaedit"); rc.on("navhookbeforeschemaedit", schemaCheckout, this); rc.navHook(ctx, true); }else schemaCheckout(); }else schemaCheckout(); } kw.Progress.ShowProgress(progress); kw.DatatableLib.getSchemaId(actionArgs, target, gotSchemaId, schemaIdError, this); }; kw.DatatableLib.setWidgetRequired = function(widget, state) { var headerText = widget.portlet.header.child(".x-panel-header-text"); if (headerText) { if (state) headerText.addClass("kwrequired"); else headerText.removeClass("kwrequired"); } else kw.Util.debugHere("expected element"); }; kw.DatatableLib.setWidgetError = function(widget, state, tooltip) { var iconCls = "kw-dtfield-error-icon"; var errorIconSpan = widget.portlet.header.child("."+ iconCls); if (!errorIconSpan && state) { errorIconSpan = widget.portlet.header.insertFirst({tag: "span", cls: iconCls, html: " "}); errorIconSpan.setVisibilityMode(Ext.Element.DISPLAY); var qt = new Ext.QuickTip({target: errorIconSpan, interceptTitles: true}); widget.on("destroy", function() {Ext.destroy(qt);}); } if (state) { errorIconSpan.dom.setAttribute("title", tooltip); errorIconSpan.show(); widget.portlet.header.addClass("kw-dte-error"); } else if (errorIconSpan) { errorIconSpan.hide(); widget.portlet.header.removeClass("kw-dte-error"); } }; kw.DatatableLib.setTitleWidget = function(widget, state) { if (!widget.rendered) { widget.on("afterrender", function() { kw.DatatableLib.setTitleWidget(this, state); }, widget, {single: true}); return; } var tools = widget.ownerCt.tools; tools.close.disabled = state; var _dom = widget.portlet.ownerCt.getLayoutTarget().dom; if (state) { if ((typeof(widget._titleHelper) == "undefined") || (widget._titleHelper == null)) { widget._titleHelper = Ext.DomHelper.append(_dom, {tag: 'span', cls: 'kwhelp', html: kw.Strings.Datatable.TitleWidgetHelpText}); } } else { _dom.removeChild(widget._titleHelper); widget._titleHelper = null; } kw.DatatableLib.setWidgetRequired(widget, true); //the previous title widget needs to have 'required' checked }; kw.DatatableLib.CreateRow = function (actionArgs) { var schemaId; var target = actionArgs.context.id; var meta = actionArgs.context.getContextProperties(); if (kw.Util.hasSelection(actionArgs)) { meta = actionArgs.selection.items[0].metadata; target = meta.get("r_object_id"); } if (meta && meta.getMetaType() == kw.MetaType.ROW) { target = meta.get("i_folder_id")[0].id; // get the data table where this row belongs. } if (!target) return; function onEditEntry() { var myTab = kw.RendEng.getTabManager().getActiveTab(); var rc = kw.widget.datatable.getRowControl(myTab.el.dom); rc.pageControl.box.doLayout(false, true); rc.editRow(); } var activeTab = kw.RendEng.getTabManager().getActiveTab(); activeTab.on(kw.EventNames.DeferredBinding, onEditEntry, this, {single: true}); var ctx = actionArgs.context.cloneContext(); ctx.id = target; ctx.view = "content"; ctx.queryString = "?mode=entry"; kw.RendEng.navigate(ctx); }; // can use ContentService.cancelCheckout(idset, callbacks); w/ datatable id now // kw.DatatableLib.UnlockSchema = function (actionArgs) // { // // // TODO: We need to show up 2 differnt confirmation dialogs before trying to unlock/Cancel Editing the Schema - Sarada // var schemaId; // var target = actionArgs.context.id; // if (kw.Util.hasSelection(actionArgs)) { // target = actionArgs.selection.items[0].metadata.get("r_object_id"); // } // if (!target) // return; // // function schemaIdError(e) { // throw new Error("can't get schema id for data table"); // } // // function gotSchemaId(result) { // schemaId = result; // var schemaObjIdentity = new ObjectIdentity(); // schemaObjIdentity.value = schemaId; // schemaObjIdentity.valueType = "OBJECT_ID"; // schemaObjIdentity.repositoryName = actionArgs.context.repository; // var idset = {identities:[schemaObjIdentity]}; // // var onCancelCheckout = function(data) // { // var evtactionArgs = new kw.ActionArgs({ // context: actionArgs.context, // metadata: {r_object_id: target} // }); // kw.Events.publish(kw.EventNames.ItemModified, evtactionArgs); // }; // // var _error = function(excName, excObj){ // kw.Util.debug("ERROR ContentService.checkout: "+ excObj.message); // }; // // var callbacks = kw.getCallbackClosure(this, onCancelCheckout, _error); // ContentService.cancelCheckout(idset, callbacks); // } // // kw.DatatableLib.getSchemaId(actionArgs, target, gotSchemaId, schemaIdError, this); // }; kw.DatatableLib.validateMemberScope = function(newTitle) { // if editing the schema, and looking for specific members if (this.getValue() != this.allSpaceMembersString) { var itemList = this.ownerCt.items.items; if ((this.memberListIdx == undefined) || (this.isRequiredIdx == undefined)) { for (var idx=0; idx < itemList.length; idx++) { if (itemList[idx].name == 'memberList') this.memberListIdx = idx; if (itemList[idx].name == 'isRequired') this.isRequiredIdx = idx; } } // and column is required if (itemList[this.isRequiredIdx].getValue()) { // and no members are selected... if (itemList[this.memberListIdx].members.length == 0) return kw.Strings.Datatable.mustSelectOneMember; } } return true; } var MAX_LENGTH_OF_DT_FIELD_TITLE = 64; /** * validator -- don't allow value to be reduced from initial value * @param v */ kw.DatatableLib.validateNoReduction = function(v) { var cmp=Ext.getCmp(this.el.findParent(".kwdialog").id); var widget=cmp.actionArgs.component.component.widget; var bind=widget.getFieldBinding(); if (!bind.saved) return true; var origv = this.initialConfig.value; var loadedConfig=widget.loadedConfig; // config at the time of widget creation if (loadedConfig.characters) origv =loadedConfig.characters; return (v>=origv) ? true: kw.Strings.Datatable.NoReduction; }; kw.DatatableLib.validateUniqueTitle = function(newTitle) { newTitle = newTitle.trim(); //kwc-8504 - check for max length execeeded if (newTitle && (newTitle.length > MAX_LENGTH_OF_DT_FIELD_TITLE)) { return kw.Strings.Datatable.titleTooLong; } newTitle = Ext.util.Format.htmlEncode(newTitle); if (!this._savedPortletId) { var dlg = this.findParentBy(function(p) {return p.el.hasClass("kwdialog");}); this._savedPortletId = dlg.actionArgs.component.id; } var f = Ext.getCmp(this._savedPortletId); if (!f) return true; if (f.title == newTitle) return true; if (!this._savedRowControlId) { this._savedRowControlId = kw.widget.datatable.getRowControlForWidget(f).id; } var rc = Ext.getCmp(this._savedRowControlId); if (rc && rc.form.findFieldByTitle(newTitle)) { return kw.Strings.Datatable.fieldNameInUse; } return true; }; kw.DatatableLib.ResetToContainerPermissions = function(actionArgs) { kw.ScriptLoader.requireStrings("Datatable"); kw.ScriptLoader.requireStrings("Permissions"); var progress = {}; var _complete = function(data) { var oid = actionArgs.context.getObjectIdentity(); kw.Events.publish(kw.EventNames.AclChanged, oid); kw.Progress.EndProgress(progress); if (actionArgs.returnCallback) { actionArgs.returnCallback(data, "updatePermissions"); } } var resetPermissions = function(btn) { if (!kw.ActionLib.affirmed(btn)) { return; } kw.Progress.ShowProgress(progress); var pp = new PermissionsProfile(); pp.resetToContainerPermissions = true; var objectIdentity = actionArgs.context.getObjectIdentity(); var callbacks = kw.getCallbackClosure(this, _complete); try { PermissionService.updatePermissions(objectIdentity, null, pp, callbacks); } catch(ex) { kw.Progress.EndProgress(progress); throw ex; } } var metadata = actionArgs.context.getContextProperties(); var objectName = metadata.get("object_name"); var aclContainerName = actionArgs.aclContainerName; kw.MessageBox.show({ title: kw.Strings.Permissions.resetToParentACLPromptTitle, msg: String.format(kw.Strings.Permissions.resetToParentACLPromptText, objectName, aclContainerName), buttons: Ext.MessageBox.OKCANCEL, icon: Ext.MessageBox.WARNING, fn: resetPermissions }, actionArgs); } kw.DatatableLib.globalDatatableCreate = function(actionArgs, createMetaType){ kw.ScriptLoader.require("js/kw/Dialog/BasicSourcePicker.js"); var selectionMade = function(itemName, itemId, imageUrl, itemPath, isFolder, spaceUrlName) { var createArgs = kw.Util.clone(actionArgs); createArgs.context = new kw.Context({repository: actionArgs.context.repository, _spaceId: itemId, space: spaceUrlName}); createArgs.space_object_name=itemName; // pass in space object name to avoid getting space properties if not present on context var selectedLocId = new ObjectIdentity(); selectedLocId.value = itemId; selectedLocId.valueType = "OBJECT_ID"; selectedLocId.repositoryName = actionArgs.context.repository; createArgs.locationId = selectedLocId; if (createMetaType == kw.MetaType.DATATABLE) { kw.ActionManager.showDialog(kw.Dialog.DatatableCreate, createArgs); } }; //helpid assignment if (createMetaType == kw.MetaType.DATATABLE) { actionArgs.helpid = "cents_add_table"; } // show the source picker to choose a space var newActionArgs = kw.Util.clone(actionArgs); newActionArgs.selectionCallback = selectionMade.createDelegate(this); newActionArgs.context = kw.getContext(); var dialogTitle = kw.Util.getTypeSpecificString(kw.Strings.ChooseSource.selectSpace_Title._tbl, createMetaType); var locPicker = new kw.Dialog.GlobalNewLocationPicker({ actionArgs: newActionArgs, autoProgress: false, allowedType: "dmc_kw_space_folder", titleSelected: dialogTitle, defaultSelection: kw.getContext().getSpaceId() }); if (locPicker.getInitialDataStore) { var progress = {}; function onInitDataStoreLoad (store, results, params){ kw.Progress.EndProgress(progress); if (store.data.length == 1) { var metaData = store.getAt(0); // only one selectionMade(metaData.get("object_name"), metaData.get("r_object_id"), metaData.get("_kw_icon").smIconUrl, metaData.get("_kw_primary_location"), false, metaData.get("_kw_space_urlname")); } else { locPicker.show(); } } kw.Progress.ShowProgress(progress); var dataStore = locPicker.getInitialDataStore(this, onInitDataStoreLoad); } else { locPicker.show(); } }; /* get schema id (using cache or context metadata if possible); success is called w/ schemaId as simple arg. */ kw.DatatableLib.getSchemaId = function (actionArgs, tid, success, failure, scope) { var schemaId; if (schemaId=kw.data.DtMetadataCache.getProperty(tid, "schema_id")){ success.call(scope, schemaId); return; }else if(tid==actionArgs.context.id && (schemaId=actionArgs.context.getContextProperties().get("schema_id", true))){ kw.data.DtMetadataCache.updateCache(tid, {schema_id: schemaId}); success.call(scope, schemaId); return; } function localSuccess(result){ schemaId = result.properties.schema_id.id; kw.data.DtMetadataCache.updateCache(tid, { schema_id: schemaId, object_name: result.properties.object_name }); success.call(scope, schemaId); } var objectIdentity = new ObjectIdentity(); objectIdentity.repositoryName = actionArgs.context.repository; objectIdentity.value = tid; objectIdentity.valueType = 'OBJECT_ID'; var propertyProfile = new PropertyProfile(); propertyProfile.includeProperties = ["schema_id"]; ContentService.getObject(objectIdentity, propertyProfile, kw.getCallbackClosure(scope, localSuccess, failure)); }; /** kwc-8405 kwc-8549 * Get markup for entry title name (name is link to the entry). * @param context * @param record * @param name * @param ops */ kw.DatatableLib.getTitleColumnEntryNameMarkup = function(context, record, value /* optional*/, ops /*optional*/) { if(!value) return ""; //KWC-8730 ops = ops || {}; var link = kw.Util.getNameLink(context, record); var linkcls = "kw-dtentrylist-title-link"; var title = value; title = Ext.util.Format.stripTags(title); // KWC-21453: encode quotes in tooltip markup to prevent syntax errors when substituting into template title = title.replace(/'/g, '''); title = title.replace(/"/g, '"'); var template = "{3}" return String.format(template, title, linkcls, link.url, value); }; /** ------------------------------------------------------------------------------- * Datatable store and property Cache * * */ Ext.namespace("kw.data"); var MC = kw.data._dtMetadataCache = {}; kw.data.DtMetadataCache = (function(){ var impl = { get: function (key){ return MC[key]; }, getProperty: function (key, name){ var cache= MC[key]; if (cache){ return cache[name]; } return undefined; }, updateCache: function(key, items){ var cache= MC[key]; if (!cache) cache= MC[key] = items; else{ Ext.apply(cache, items); } return cache; } }; function onItemModified(evtName, actionArgs) { var itemId = actionArgs.metadata.get("r_object_id"); if (itemId && this.get(itemId)) { var objName = actionArgs.metadata.get("object_name"); if (objName) { this.updateCache(itemId, {object_name: objName}); } } } kw.Events.subscribe(kw.EventNames.ItemModified, onItemModified, impl); return impl; })(); /* ----------------------------------------------------------------------------------------------------------*/ })(); //END kw.DatatableLib Ext.namespace("kw.debug"); kw.debug.DatatableLib = function() {eval("debugger")}; // SchemaModePlaceholder.js ///////////////////////////////////////////////////////////////////////// // SchemaModePlaceholder -- appears only on the Fields and Settings page kw.widget.SchemaModePlaceholder = function(config) { rcmp.intf.attachInterfaces(this, kw.widget.SchemaModePlaceholder); var thisConfig = {cls: "kw-dtfield"}; Ext.applyIf(thisConfig, config); if (thisConfig.name) this.name = thisConfig.name; else this.name = ""; kw.widget.SchemaModePlaceholder.superclass.constructor.call(this, thisConfig); }; Ext.extend(kw.widget.SchemaModePlaceholder, Ext.Panel, { onDestroy : function(){ Ext.each(this.subscriptions, kw.Events.unsubscribe); kw.widget.SchemaModePlaceholder.superclass.onDestroy.call(this); }, onRender : function(container, position) { kw.widget.establishContext(this, this.initialConfig, container); kw.widget.SchemaModePlaceholder.superclass.onRender.call(this, container, position); if (this.portlet) { if (this.name) this.portlet.setWidgetTitle(this.name); else this.portlet.setWidgetTitle(true); // show header even if empty this.portlet.userConfigurable = false; this.portlet.showHeader(true); if (this.initialConfig.onDeleteMessage) this.portlet.on("deletewidget", this.onDeleteWidget, this); } }, onPageEdit: function(bCanChangeLayout) { }, onPageSave: function(bCanChangeLayout) {}, onPageEditCancel: function(bCanChangeLayout) {}, onSelect: function(pageMode, evt) {}, onDeselect: function(pageMode) {}, onRemoveWidget: function() { return true; }, onWidgetMoved: function() {}, getTitle: function() { return kw.Util.retainWhiteSpaces(Ext.util.Format.htmlEncode(this.name)); }, canUpdateSelf : function(configParams) { return true; }, onUpdate : function(changedConfigParams) { if (typeof changedConfigParams.name != "undefined") { this.name = changedConfigParams.name; if (this.portlet) { if (this.name) this.portlet.setWidgetTitle(this.getTitle()); else this.portlet.setWidgetTitle(true); this.portlet.showHeader(true); } } }, onDeleteWidget: function(props) { props.message = this.initialConfig.onDeleteMessage; } }); /* DatatableActions.js */ /** * CenterStage Datatable and Entry Actions! */ Ext.namespace("kw.Action.Datatable"); kw.ScriptLoader.require("js/kw/Dialog/SaveAsTemplate.js"); kw.ScriptLoader.require("js/kw/Dialog/TemplateSettings.js"); kw.ScriptLoader.require("js/kw/widget/CommunityPageNav.js"); kw.ScriptLoader.require("js/kw/Dialog/BasicSourcePicker.js"); kw.ScriptLoader.requireStrings("Datatable"); kw.ScriptLoader.requireStrings("DatatableSaveAsTemplate"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DatatableLib.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DatatableCreate.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DatatableImport.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DatatableExport.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib", "js/entryPreviewBubbleListContainer.js"); // add db types to core actions kw.Action.ContentImport.initialConfig.selectionTypes.push(kw.MetaType.DATATABLE); kw.Action.ContentImport.initialConfig.selectionTypes.push(kw.MetaType.ROW); kw.Action.SaveAsTemplate.initialConfig.selectionTypes.push(kw.MetaType.DATATABLE); kw.Action.ItemPaste.initialConfig.selectionTypes.push(kw.MetaType.DATATABLE); kw.Action.ItemPaste.initialConfig.selectionTypes.push(kw.MetaType.ROW); kw.Action.NewItemsSubMenu.initialConfig.selectionTypes.push(kw.MetaType.ROW); /* Save As Template */ kw.Dialog.SaveAsTemplate.templateTypes[kw.MetaType.DATATABLE]= {title: kw.Strings.Dialog.DatatableSaveAsTemplate.datatableTitle, uniqueNameScope: kw.Strings.Dialog.DatatableSaveAsTemplate.uniqueNameInSpace, datalistId: "datatable_templates", includeIcon: false, // not in V1 includeTemplateAccessScope: true, templateAlreadyExistMessage: kw.Strings.Dialog.DatatableSaveAsTemplate.datatableTemplate_exist, createMethodName: "createTemplate"}; /* Template Settings */ Ext.applyIf(kw.TemplateSettings.templateTypes, {dmc_datatable : {datalistId: "datatable_templates", includeIcon: false, includeTemplateAccessScope: true, updateMethodName: "updateTemplate"}}); /* Community Page */ Ext.apply(kw.widget.CommunityPageNav.recentActivityConfigPro, {additionalItems: [(new kw.widget.CommunityPageNavButton({ allowDrag: false, allowDrop: false, cls: "kw-communityNavButton", text: kw.Strings.Datatable.RecentActivity.recentEntries, iconCls: "kw-datatableEntryRecent16", qtip: kw.Strings.Datatable.RecentActivity.recentEntriesTip, navid: "page", pgview: "community_rEntries" }))]}); /* Choose a Source Dialog */ Ext.applyIf(kw.Dialog.BasicSourcePicker.allowedTypes, {dmc_kw_space_folder: { defaultScope: kw.SearchScopeEnum.ALL_MY_SPACES_EDITABLES, searchScopes: [kw.SearchScopeEnum.FAVORITE_SPACES_EDITABLES, kw.SearchScopeEnum.ALL_MY_SPACES_EDITABLES, kw.SearchScopeEnum.RECENT_ITEMS_EDITABLES ], params: [{name: "show_datatable_locations", value: ""}]}}); /* Preview Bubble Datatable and Entry Type defintions */ kw.bubble.previewBubble.push(kw.MetaType.DATATABLE); kw.bubble.previewBubble.push(kw.MetaType.ROW); kw.bubble.previewBubble.push(kw.MetaType.DTTEMPLATE); kw.bubble.metaTypes[kw.MetaType.DATATABLE]= { queryId: 'datatable_query', filter_parameterName: "datatable_id", metadataList: [ kw.bubble.sysinfoDisplayType.CREATED, kw.bubble.sysinfoDisplayType.UPDATED, kw.bubble.sysinfoDisplayType.CONTAINS, kw.bubble.sysinfoDisplayType.COMMENTS, kw.bubble.sysinfoDisplayType.TAG ], stringsInBubble: { listBoxTitleLC: kw.Strings.DatatablePreviewPanel.StringInBubble._entriesLC, listBoxChildrenCountUC: kw.Strings.DatatablePreviewPanel.StringInBubble._entriesUC, listBoxTitleUC: kw.Strings.DatatablePreviewPanel.StringInBubble._entriesUC }, bubbleLayout :[{xtype: 'kwpreviewbubbleheader', region: 'north', height: 25}, {xtype: 'kwpreviewbubblelistcontainer', region: 'center', bodyStyle: 'background-color:#f5fcf2;', margins: '0 0 15 0'}, {xtype: 'kwpreviewbubblefooter', region: 'south', toolbarName : 'kw.bubble.previewbubble.footertoolbar.DATATABLE'} ] }; kw.bubble.metaTypes[kw.MetaType.ROW]= { queryId: 'datatable_entry_query', filter_parameterName: "entry_id", metadataList: [ kw.bubble.sysinfoDisplayType.CREATED, kw.bubble.sysinfoDisplayType.UPDATED, kw.bubble.sysinfoDisplayType.LOCATED, kw.bubble.sysinfoDisplayType.COMMENTS, kw.bubble.sysinfoDisplayType.TAG ], stringsInBubble: {}, bubbleLayout :[{xtype: 'kwpreviewbubbleheader', region: 'north'}, {xtype: 'kwentrypreviewbubblelistcontainer', region: 'center', bodyStyle: 'background-color:#f5fcf2;', margins: '0 0 15 0'}, {xtype: 'kwpreviewbubblefooter', region: 'south', toolbarName : 'kw.bubble.previewbubble.footertoolbar.ROW'} ] }; kw.bubble.metaTypes[kw.MetaType.DTTEMPLATE] = { metadataList: [ kw.bubble.sysinfoDisplayType.DESCRIPTION, kw.bubble.sysinfoDisplayType.TEMPLATECATEGORY, kw.bubble.sysinfoDisplayType.CREATED, kw.bubble.sysinfoDisplayType.UPDATED ], stringsInBubble: {}, bubbleLayout :[{xtype: 'kwpreviewbubbleheader', region: 'north'}, {xtype: 'kwpreviewbubbletemplateinfo', region: 'center', bodyStyle: 'background-color:#f5fcf2;', margins: '0 0 15 0'}, {xtype: 'kwpreviewbubblefooter', region: 'south', toolbarName : 'kw.bubble.previewbubble.footertoolbar.DTTEMPLATE'} ] }; kw.bubble._metatype_bubbletype_table[kw.MetaType.DATATABLE] = kw.bubble.bubbleType.LISTCONTAINER; kw.bubble._metatype_bubbletype_table[kw.MetaType.ROW] = kw.bubble.bubbleType.TEXTCONTAINER; kw.bubble._metatype_bubbletype_table[kw.MetaType.DTTEMPLATE] = kw.bubble.bubbleType.NOCONTAINER; /* End of Preview Bubble code*/ // this is for the editing toolbar (don't use in context menu) kw.Action.Datatable.buttonTemplate = kw.Action.Page.buttonTemplate; kw.Action.Datatable.Export = new kw.Action({ aid: "kw.Action.Datatable.Export", iconCls:"kw-dt-export kw-action-icon", text: kw.Strings.Action.DatatableExport._text, contextTypes: [kw.MetaType.DATATABLE], contextPermits: [kw.Permits.canRead], handler: function(actionArgs) { kw.ActionManager.showDialog(kw.Dialog.DatatableExport, actionArgs); } }); kw.Action.Datatable.Previous = new kw.Action({ aid: "kw.Action.Datatable.Previous", template: kw.Action.Datatable.buttonTemplate, cls: "kw-dt-prev-spacer", iconCls:"kw-dt-entry-previous", tooltip:kw.Strings.Datatable.PreviousTip, contextTypes: [kw.MetaType.ROW, kw.MetaType.SCHEMA], getEnablement:function(actionArgs, summary){ var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); if (!rc || !rc.dtStore || (rc.getMode() != kw.widget.datatable.VIEW_MODE)) return kw.Enablement.HIDE; if (rc.isPreviousBtnDisabled()) return kw.Enablement.DISABLE; return kw.Enablement.ENABLE; }, getResources: function(actionArgs, summary){ var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); var dtProps = actionArgs.context.getDataTableProperties(); if (dtProps) return {tooltip: this.tooltip + "
"+ rc.getNameOfNextOrPrevEntry(false), doTooltipUpdate: true}; else { kw.Util.debugHere("no dt props"); return {tooltip: ""}; } }, handler: function(actionArgs) { var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); rc.displayPreviousEntry(); } }); kw.Action.Datatable.Next = new kw.Action({ aid: "kw.Action.Datatable.Next", template: kw.Action.Datatable.buttonTemplate, cls: "kw-dt-next-spacer", iconAlign: "right", iconCls:"kw-dt-entry-next", tooltip:kw.Strings.Datatable.NextTip, contextTypes: [kw.MetaType.ROW, kw.MetaType.SCHEMA], getEnablement:function(actionArgs, summary){ var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); if (!rc || !rc.dtStore || (rc.getMode() != kw.widget.datatable.VIEW_MODE)) return kw.Enablement.HIDE; if (rc.isNextBtnDisabled()) return kw.Enablement.DISABLE; return kw.Enablement.ENABLE; }, getResources: function(actionArgs, summary){ var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); var dtProps = actionArgs.context.getDataTableProperties(); if (dtProps) return {tooltip: this.tooltip + "
"+ rc.getNameOfNextOrPrevEntry(true), doTooltipUpdate: true}; else { kw.Util.debugHere("no dt props"); return {tooltip: ""}; } }, handler: function(actionArgs) { var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); rc.displayNextEntry(); } }); kw.Action.Datatable.GoToSummary = new kw.Action({ aid: "kw.Action.Datatable.GoToSummary", template: kw.Action.Datatable.buttonTemplate, cls: "kw-dt-summary-spacer", iconAlign: "right", iconCls:"kw-go-to-summary", contextTypes: [kw.MetaType.ROW], getResources: function(actionArgs, summary){ var dtProps = actionArgs.context.getDataTableProperties(); if (dtProps) return {tooltip: String.format(kw.Strings.Datatable.summaryTip, dtProps.get("object_name"))}; else { kw.Util.debugHere("no dt props"); return {tooltip: ""}; } }, handler: function(actionArgs) { var dtProps = actionArgs.context.getDataTableProperties(); if (dtProps) { var navToCtx = new kw.Context(actionArgs.context.getUrl()); navToCtx.id = dtProps.get("r_object_id"); navToCtx.queryString = ""; if (!navToCtx.space) navToCtx.space = kw.RendEng.RepoPseudoSpaceName; var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); if (!rc || !rc.dtStore || (rc.getMode() != kw.widget.datatable.VIEW_MODE)) kw.PagingToolbar.clearSavedGridPage(); kw.RendEng.navigate(navToCtx); return; } kw.Util.debugHere("expected dt properties"); } }); kw.Action.DatatablePageMenu = new kw.Action({ aid: "kw.Action.DatatablePageMenu", iconCls:"kw-am-DATATABLE", menuAlign: "tr-br?", getResources:function(actionArgs){ var metatype = actionArgs.context.getContextProperties().getMetaType(); return {text: kw.Util.getTypeSpecificString(kw.Strings.Action.PageMenu._tbl, metatype)}; }, menuContainer: "kw.Action.DatatablePageMenu" }); kw.Action.DatatableEntryPageMenu = new kw.Action({ aid: "kw.Action.DatatableEntryPageMenu", iconCls:"kw-am-ROW", menuAlign: "tr-br?", text: kw.Strings.Action.DatatableEntryActions._text, menuContainer: "kw.Action.DatatableEntryPageMenu" }); kw.Action.ShowView_DatatableHome = new kw.Action({ aid: "kw.Action.ShowView_DatatableHome", text: kw.Util.getTypeSpecificString(kw.Strings.ShowHome._tbl, kw.MetaType.DATATABLE), iconCls: "kw-dt-home kw-action-icon", contextPermits: [kw.Permits.canBrowse], handler: function(actionArgs) { var context = actionArgs.context.getContext(); var meta = actionArgs.context.getContextProperties(); context.id = meta.get("i_folder_id")[0].id; context.view = 'content'; kw.RendEng.navigate(context); } }); ///////////////////////////////////////////////////////////////////////////////////////////////////////// //Create Datatable kw.Action.Datatable.Create = new kw.Action({ aid: "kw.Action.Datatable.Create", iconCls:"kw-new-datatable", text: kw.Strings.Action.Pro.DatatableCreate._text, selectionTypes: [kw.MetaType.SPACE, kw.MetaType.FOLDER, kw.MetaType.DATATABLE, kw.MetaType.ROW], selectionPermits: [kw.Permits.canCreate], selectionGoverned: true, handler: function(actionArgs) { kw.ActionManager.showDialog(kw.Dialog.DatatableCreate, actionArgs); } }); kw.Action.Datatable.CreateForContext = new kw.Action({ aid: "kw.Action.Datatable.CreateForContext", iconCls:"kw-new-datatable", text: kw.Strings.Action.Pro.DatatableCreate._text, contextTypes: [kw.MetaType.SPACE, kw.MetaType.FOLDER, kw.MetaType.DATATABLE, kw.MetaType.ROW], contextPermits: [kw.Permits.canCreate], contextGoverned: true, getResources:function(actionArgs, summary, trigger){ if (summary.menuaid.indexOf("kw.Action.NewItems")==-1) return kw.Util.formatContextMetaType (actionArgs, kw.Strings.New_tpl); return {}; }, handler: function(actionArgs) { actionArgs.selection=null; kw.ActionManager.showDialog(kw.Dialog.DatatableCreate, actionArgs); } }); kw.Action.Datatable.CreateEntry = new kw.Action({ aid: "kw.Action.Datatable.CreateEntry", iconCls:"kw-new-datatable-row kw-action-icon", text: kw.Strings.Action.Pro.DatatableEntryCreate._text, selection: [kw.Select.SINGLE, kw.SelectModifier.HIDEMULTIPLE], selectionTypes: [kw.MetaType.DATATABLE], selectionPermits: [kw.Permits.canCreate], selectionGoverned:true, getResources:function(actionArgs, summary){ if (!kw.Util.hasSelection(actionArgs)) return {}; var strtbl=(summary.menuaid=="kw.Action.NewItemsMenu")?kw.Strings.Action.PageCreate._tbl: kw.Strings.Action.PageCreate._tblnew; var metatype=actionArgs.selection.items[0].metadata.getMetaType(); return kw.MetaTypeUtil.getCreateInThisResources(metatype, strtbl, kw.Strings.Action.PageCreate._tbltooltip); }, getEnablement: function(actionArgs, summary) { var lo = actionArgs.context.getContextProperties().get("r_lock_owner"); return lo ? kw.Enablement.DISABLE : kw.Enablement.ENABLE; }, handler: function(actionArgs) { kw.DatatableLib.CreateRow(actionArgs); } }); kw.Action.Datatable.CreateInThis = new kw.Action({ aid: "kw.Action.Datatable.CreateInThis", tooltip: kw.Strings.Datatable.newEntryTip, iconCls:"kw-new-datatable-row kw-action-icon kw-accelerator-n-target", text: kw.Strings.Action.Pro.DatatableEntryCreate._text, contextTypes: [kw.MetaType.DATATABLE, kw.MetaType.ROW], contextGoverned:true, getEnablement:function(actionArgs, summary){ var meta = actionArgs.context.getContextProperties(); var metatype = meta.getMetaType(); var permits, lo; if (metatype==kw.MetaType.ROW){ meta=actionArgs.context.getDataTableProperties(); } lo = meta.get("r_lock_owner"); permits = meta.get("_kw_permits"); return lo || !permits[kw.Permits.canCreate] ? kw.Enablement.DISABLE : kw.Enablement.ENABLE; }, // getEnablement:function(actionArgs, summary){ // var meta = actionArgs.context.getContextProperties(); // var metatype = meta.getMetaType(); // var permits, lo; // lo = meta.get("r_lock_owner"); // permits = meta.get("_kw_permits"); // if (metatype==kw.MetaType.ROW){ // lo=""; // permits = meta.get("_kw_container_permits"); // } // return lo || !permits[kw.Permits.canCreate] ? kw.Enablement.DISABLE : kw.Enablement.ENABLE; // }, handler: function(actionArgs) { kw.DatatableLib.CreateRow(actionArgs); } }); kw.Action.Datatable.GlobalCreate = new kw.Action({ aid: "kw.Action.Datatable.GlobalCreate", iconCls:"kw-new-datatable", text: kw.Strings.Action.Pro.DatatableCreate._text, handler: function(actionArgs) { kw.DatatableLib.globalDatatableCreate(actionArgs, kw.MetaType.DATATABLE); } }); kw.Action.Datatable.GlobalRecentEntries = new kw.Action({ aid: "kw.Action.Datatable.GlobalRecentEntries", iconCls:"kw-datatableEntryRecent16", text: kw.Strings.Datatable.RecentActivity.recentEntries, cls: "kw-community-global-menu-items", handler: function(actionArgs){ var clickContext = Ext.apply({}, actionArgs.context); clickContext.repository = actionArgs.context.repository, clickContext.space = kw.RendEng.GlobalPseudoSpaceName, clickContext.view = "home", clickContext.id = "page"; clickContext.pgview = "community_rEntries"; kw.RendEng.navigate(clickContext); } }); kw.Action.Datatable.EditSchema = new kw.Action({ aid: "kw.Action.Datatable.EditSchema", iconCls:"kw-file-edit kw-action-icon", text: kw.Strings.Action.Pro.Datatable.EditSchema._text, tooltip: kw.Strings.Action.Pro.Datatable.EditSchema._tooltip, selection: [kw.Select.SINGLE, kw.SelectModifier.HIDEMULTIPLE], selectionTypes: [kw.MetaType.DATATABLE], selectionPermits: [kw.Permits.canEdit], selectionGoverned:true, getOverride:function(actionArgs){ var meta; if (!kw.Util.hasSelection(actionArgs)) return false; meta = actionArgs.selection.items[0].metadata; if (meta.status &&meta.status!=kw.Status.LOADED) return false; // avoid access till loaded! return (meta.getMetaType()==kw.MetaType.DATATABLE); }, getEnablement:function(actionArgs, summary) { // custom enablement (called if present) var metadata = actionArgs.context.getContextProperties(); if (kw.Util.hasSelection(actionArgs)) metadata = actionArgs.selection.items[0].metadata; var permits = metadata.get("_kw_permits"); if (!permits[kw.Permits.canEdit]) return kw.Enablement.DISABLE; var lockOwner = metadata.get("r_lock_owner"); if (lockOwner && lockOwner != "") return kw.Enablement.HIDE; return kw.Enablement.ENABLE; }, handler: function(actionArgs) { kw.DatatableLib.EditSchema(actionArgs); } // , // enablementHooks: { // "kw.Action.Edit": function(actionArgs, summary) { // if (actionArgs.selection && // actionArgs.selection.items.length && // (actionArgs.selection.items[0].metadata.getMetaType() == kw.MetaType.DATATABLE)) // return kw.Action.Datatable.EditSchema.initialConfig.getEnablement.apply(this, arguments); // // return kw.Action.Datatable.EditSchema.origEnablement["kw.Action.Edit"].apply(this, arguments); // } // } }); //kw.Action.Datatable.EditSchema.hookEnablement(kw.Action.Edit); kw.Action.Datatable.ImportEntries = new kw.Action({ aid: "kw.Action.Datatable.ImportEntries", iconCls:"kw-dt-import kw-action-icon", text: kw.Strings.Action.Pro.DatatableEntriesImport._text, contextTypes: [kw.MetaType.DATATABLE], contextPermits: [kw.Permits.canCreate], contextGoverned:true, handler: function(actionArgs) { kw.ActionManager.showDialog(kw.Dialog.DatatableImport, actionArgs); } }); kw.Action.Datatable.ExpandCollapse = new kw.Action({ aid: "kw.Action.Datatable.ExpandCollapse", cls:"kw-db-expand-collapse-btn x-tool x-tool-up", getEnablement:function(actionArgs, summary){ var pc = kw.widget.PageControl.getPageControlForWidget(actionArgs.component); var metaType = pc.context.getContextProperties().getMetaType(); if (metaType == kw.MetaType.ROW || metaType == kw.MetaType.SCHEMA){ return kw.Enablement.ENABLE; } return kw.Enablement.HIDE; }, handler: function(actionArgs) { var trigger = actionArgs._trigger; var contextNode = trigger.el.findParentNode('.context_node', 35, true); var pageContentArea = contextNode.child('.page-content-area'); var dbPane = pageContentArea.child('.kw-scrollbox-markerforpage'); var dbPaneBody = dbPane.first().first(); var dbPaneBodyHeight = dbPaneBody.getHeight(); if (trigger.el.hasClass('x-tool-up') || dbPaneBodyHeight) { trigger.removeClass('x-tool-up'); trigger.addClass('x-tool-down'); dbPaneBody._savedHeight = dbPaneBody.getHeight(); dbPaneBody.setHeight(0); } else { trigger.removeClass('x-tool-down'); trigger.addClass('x-tool-up'); dbPaneBody.setHeight(dbPaneBody._savedHeight); } var cmp = Ext.getCmp(pageContentArea.id); cmp.doLayout(); } }); kw.Action.Datatable.Filter = new kw.Action({ aid: "kw.Action.Datatable.Filter", createTrigger:function (containername, actionArgs, triggerDef, summary){ rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DtFilter.js"); return new kw.widget.datatable.SearchTool({actionArgs: actionArgs}); } }); kw.Action.Datatable.FilterStatus = new kw.Action({ aid: "kw.Action.Datatable.FilterStatus", createTrigger:function (containername, actionArgs, triggerDef, summary){ return new kw.widget.datatable.FilterStatus({actionArgs: actionArgs, text: ""}); } }); kw.Action.Datatable.SearchFilterExpStr = new kw.Action({ aid: "kw.Action.Datatable.SearchFilterExpStr", createTrigger:function (containername, actionArgs, triggerDef, summary){ return new kw.widget.datatable.SearchFilterExpStr({actionArgs: actionArgs, text: ""}); } }); kw.Action.Datatable.ClearFilter = new kw.Action({ aid: "kw.Action.Datatable.ClearFilter", createTrigger:function (containername, actionArgs, triggerDef, summary){ return new kw.widget.datatable.ClearFilter({actionArgs: actionArgs}); } }); kw.Action.Datatable.AddFieldsToTable = new kw.Action({ aid: "kw.Action.Datatable.AddFieldsToTable", iconCls: "kw-pageedit-addwidget", text: kw.Strings.Action.Pro.Datatable.AddField._text, tooltip: kw.Strings.Action.Pro.Datatable.AddField._tooltip, handler: function(actionArgs) { var tab = kw.RendEng.getTabManager().getActiveTab(); if (tab) { var pc = kw.widget.PageControl.getPageControl(tab.el.dom); if (pc) { pc.fireEvent("adddtwidget"); } } } }); kw.Action.Datatable.CancelConfigEdit = new kw.Action({ aid: "kw.Action.Datatable.CancelConfigEdit", createTrigger:function (containername, actionArgs, triggerDef, summary){ return new Ext.Toolbar.Button({ text: kw.Strings.Action.CancelPageEdit._text, tooltip: kw.Strings.Action.DatatableCancelConfigEdit._tooltip, template: kw.Action.Page.buttonTemplate, baseAction: kw.Action.Datatable.CancelConfigEdit, handler: kw.ActionManager.handler, _handler: function(actionArgs) { actionArgs.component.pageControl.unlockPage(actionArgs); } });} }); kw.Action.Datatable.EditEntryFromGrid = new kw.Action({ aid: "kw.Action.Datatable.EditEntryFromGrid", iconCls:"kw-file-edit kw-action-icon", text: kw.Strings.Action.Pro.EditEntry._text, tooltip: kw.Strings.Action.Pro.EditEntry._tooltip, selectionTypes:[kw.MetaType.ROW], selectionGoverned:true, getOverride:function(actionArgs){ if (!kw.Util.hasSelection(actionArgs)) return false; var meta = actionArgs.selection.items[0].metadata; if (meta.status &&meta.status!=kw.Status.LOADED) return false; // avoid access till loaded! return (meta.getMetaType()==kw.MetaType.ROW); }, getResources: function(actionArgs, summary){ if (!kw.Util.hasSelection(actionArgs)) return null; var metadata = actionArgs.selection.items[0].metadata; var metatype = metadata.getMetaType(); var res; if (metatype == kw.MetaType.FILE || (kw.MetaTypeUtil.isPage(metatype) && kw.isPro())){ if (summary.containername && summary.containername.indexOf(".bubble.")>=0){ res={text: kw.Strings.Action.Edit._text}; } else{ res={text: kw.Util.getTypeSpecificStringSel(kw.Strings.Action.Edit._tbl, actionArgs)}; } } else{ res={text: kw.Strings.Action.Edit._text}; } var lock =metadata.get("r_lock_owner"); if(lock && lock!=kw.User.getUserName(actionArgs.context) && !kw.User.isCoordinator(actionArgs.context,metadata)){ res.iconCls = "kw-locked-page"; res.tooltip = String.format(kw.Strings.Action.Edit._lockbyothertooltip, metadata.get("r_lock_owner"), Ext.util.Format.date(metadata.get("r_lock_date"), kw.Strings.DateFormats.date_month_name)); } return res; }, getEnablement: function(actionArgs, summary){ if (summary.selectionCount==0) return kw.Enablement.DISABLE; var counts = kw.MetaTypeUtil.getUnlockOrCancelCounts(actionArgs, summary); if (counts.ufiles+counts.cfiles == summary.selectionCount) return kw.Enablement.HIDE; // replaced by unlock/cancel edit else if (counts.upages+counts.cpages == summary.selectionCount == 1) return kw.Enablement.HIDE; // replaced by unlock/cancel edit if (summary.selectionCount>1) return kw.Enablement.SUPPRESS; var metadata = actionArgs.selection.items[0].metadata; var metatype = metadata.getMetaType(); var lock =metadata.get("r_lock_owner"); if(lock!="" && lock!=kw.User.getUserName(actionArgs.context) && !kw.User.isCoordinator(actionArgs.context,metadata)) return kw.Enablement.DISABLE; var permits = metadata.get("_kw_permits"); if (metatype==kw.MetaType.FILE || (kw.MetaTypeUtil.isPage(metatype) && kw.isPro() && metatype!=kw.MetaType.DATATABLE) ) { // dlm todo; resolve various edit actions return permits[kw.Permits.canEdit]? kw.Enablement.ENABLE : kw.Enablement.DISABLE; } return kw.Enablement.SUPPRESS; }, handler: function(actionArgs){ var selection = actionArgs.selection; var newContext = selection.getContext(selection.items[0]); var metaType = newContext.getContextProperties().getMetaType(); newContext.view = (metaType == kw.MetaType.SPACEHOMEPAGE) ? 'home' : 'content'; if (actionArgs.component && actionArgs.component.preNavigate) actionArgs.component.preNavigate(newContext); kw.DatatableLib.navigateEditMode(newContext, Ext.emptyFn, this); } }); kw.Action.Datatable.EditEntry = new kw.Action({ aid: "kw.Action.Datatable.EditEntry", iconCls:"kw-file-edit kw-action-icon", text: kw.Strings.Action.Pro.EditEntry._text, tooltip: kw.Strings.Action.Pro.EditEntry._tooltip, contextGoverned:true, getEnablement:function(actionArgs, summary) { var meta = actionArgs.context.getContextProperties(); var metaType = meta.getMetaType(); if (metaType == kw.MetaType.ROW) { var lockowner = meta.get('r_lock_owner'); var permits = meta.get('_kw_permits'); var dbmeta = actionArgs.context.getDataTableProperties(); if (lockowner == "" || (lockowner!=kw.User.getUserName(actionArgs.context) && !kw.User.isCoordinator(actionArgs.context,meta))) { // dlm: if table is locked, we can't edit or create! // should we put table lock info in tooltip?? return dbmeta.get("r_lock_owner")=="" && permits[kw.Permits.canEdit] ? kw.Enablement.ENABLE : kw.Enablement.DISABLE; } else { return kw.Enablement.HIDE; } } return kw.Enablement.ENABLE; }, // getEnablement:function(actionArgs, summary) { // var meta = actionArgs.context.getContextProperties(); // var metaType = meta.getMetaType(); //// var lockowner = meta.get('r_lock_owner'); //// if (lockowner == "" || (lockowner!=kw.User.getUserName(actionArgs.context) && )) { // var permits = meta.get('_kw_permits'); // if (!permits[kw.Permits.canEdit] && !kw.User.isCoordinator(actionArgs.context,meta)){ // return Enablement.ENABLE; // } // else { // return kw.Enablement.HIDE; // } // }, getResources:function(actionArgs, summary){ var meta = actionArgs.context.getContextProperties(); var metaType = meta.getMetaType(); if (metaType == kw.MetaType.ROW) { var lockowner = meta.get('r_lock_owner'); if (lockowner!=""){ var lockedOn = meta.get('r_lock_date'); return {iconCls:"kw-locked-page", tooltip:String.format(kw.Strings.Action.Pro.PageLockedBy._tooltip, lockowner, lockedOn)}; } } return {}; }, handler: function(actionArgs) { kw.DatatableLib.EditRow(actionArgs); } }); kw.Action.Datatable.SaveEntry = new kw.Action({ aid: "kw.Action.Datatable.SaveEntry", createTrigger:function (containername, actionArgs, triggerDef, summary){ return new Ext.Toolbar.Button({ text: kw.Strings.Action.Pro.SaveEntry._text, tooltip: kw.Strings.Action.Pro.SaveEntry._tooltip, cls: "kw-pagetoolbarbtn-bold", template: kw.Action.Datatable.buttonTemplate, baseAction: kw.Action.Datatable.SaveEntry, handler: kw.ActionManager.handler, _handler: function(actionArgs) { var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); rc.saveRow(actionArgs); } }); } }); kw.Action.Datatable.SaveEntryAddAnother = new kw.Action({ aid: "kw.Action.Datatable.SaveEntryAddAnother", getEnablement:function(actionArgs){ var meta=actionArgs.context.getContextProperties(); var permits = (meta.getMetaType()==kw.MetaType.DATATABLE) ? meta.get("_kw_permits") : meta.get("_kw_container_permits"); return (!permits || !permits.canCreate) ? kw.Enablement.DISABLE : kw.Enablement.ENABLE; }, createTrigger:function (containername, actionArgs, triggerDef, summary){ return new Ext.Toolbar.Button({ text: kw.Strings.Action.SaveEntryAddAnother._text, tooltip: kw.Strings.Action.SaveEntryAddAnother._tooltip, template: kw.Action.Datatable.buttonTemplate, baseAction: kw.Action.Datatable.SaveEntryAddAnother, handler: kw.ActionManager.handler, _handler: function(actionArgs) { var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); function fnContinue(){ kw.ActionManager.dispatch(kw.Action.Datatable.CreateInThis, actionArgs); } rc.saveRow(actionArgs, fnContinue); } }); } }); /** * NOTE : This is used on page toolbar ONLY; not on selection */ kw.Action.Datatable.CancelEntryEdit = new kw.Action({ aid: "kw.Action.Datatable.CancelEntryEdit", createTrigger:function (containername, actionArgs, triggerDef, summary){ return new Ext.Toolbar.Button({ text: kw.Strings.Action.Pro.CancelEntryEdit._text, tooltip: kw.Strings.Action.Pro.CancelEntryEdit._tooltip, template: kw.Action.Datatable.buttonTemplate, baseAction: kw.Action.Datatable.CancelEntryEdit, handler: kw.ActionManager.handler, _handler: function(actionArgs) { var meta = actionArgs.context.getContextProperties(); var metaType = meta.getMetaType(); var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); var functCancel, msgTitle, msgBody; if (metaType == kw.MetaType.ROW) { functCancel = function(buttonId) { if (buttonId == "yes") { rc.cancelEditEntry(actionArgs); }else{ return false; } }; msgTitle = kw.Strings.Datatable.entryNavigateAwayTitle; msgBody = kw.Strings.Datatable.cancelEditEntry; kw.MessageBox.show({ title: msgTitle, msg: msgBody, buttons: Ext.MessageBox.YESNO, icon: Ext.MessageBox.WARNING, cls: 'kw-msg-alert', fn: functCancel.createDelegate(this) }, null); } else { functCancel = function(buttonId) { if (buttonId == "yes") { actionArgs.context.queryString = ""; rc.onNavigateWithNoNavHook = actionArgs.context; kw.RendEng.navigate(actionArgs.context); rc.onNavigateWithNoNavHook = null; }else{ return false; } }; msgTitle = kw.Strings.Datatable.newEntryNavigateAwayTitle; msgBody = kw.Strings.Datatable.cancelEditNewEntry; kw.MessageBox.show({ title: msgTitle, msg: msgBody, buttons: Ext.MessageBox.YESNO, icon: Ext.MessageBox.WARNING, cls: 'kw-msg-alert', fn: functCancel.createDelegate(this) }, null); } } }); } }); kw.Action.Datatable.SaveSchema = new kw.Action({ aid: "kw.Action.Datatable.SaveSchema", text: kw.Strings.Action.SaveSchema._text, tooltip: kw.Strings.Action.SaveSchema._tooltip, cls: "kw-pagetoolbarbtn-bold", template: kw.Action.Datatable.buttonTemplate, handler: function(actionArgs) { var rc = kw.widget.datatable.getRowControlForWidget(actionArgs.component); rc.saveSchema(actionArgs); } }); kw.Action.Datatable.ResetToContainerPermissions = new kw.Action({ aid: "kw.Action.Datatable.ResetToContainerPermissions", text: kw.Strings.Action.ResetToParentPermissions._text, contextGoverned: true, getEnablement: function(actionArgs, summary) { if (actionArgs.readOnlyPermissions) { return kw.Enablement.HIDE; } if (actionArgs.permissionsMatchContainer) { return kw.Enablement.HIDE; } else { return kw.Enablement.ENABLE; } }, handler: function(actionArgs) { kw.ActionLib.resetToParentPermissions(actionArgs); } }); kw.Action.NewItemsDTSubMenu = new kw.Action({ aid: "kw.Action.NewItemsDTSubMenu", text: kw.Strings.Action.New._text, iconCls:"kw-new16", selection: [kw.Select.SINGLE, kw.SelectModifier.HIDEMULTIPLE], selectionTypes: [kw.MetaType.FOLDER], //, kw.MetaType.DATATABLE contextTypes: [kw.MetaType.DATATABLE], menuContainer: "kw.Action.NewItemsSubMenu" }); kw.Action.NewItemsDTBKSubMenu = new kw.Action({ aid: "kw.Action.NewItemsDTBKSubMenu", text: kw.Strings.Action.New._text, iconCls:"kw-new16", selection: [kw.Select.SINGLE, kw.SelectModifier.HIDEMULTIPLE], selectionTypes: [kw.MetaType.FOLDER, kw.MetaType.DATATABLE, kw.MetaType.ROW], contextTypes: [kw.MetaType.DATATABLE], menuContainer: "kw.Action.NewItemsSubMenu" }); kw.Action.DatatableMoreMenu = new kw.Action({ aid: "kw.Action.DatatableMoreMenu", text: kw.Strings.Action.MoreMenu._text, tooltip: kw.Strings.Action.MoreMenu._tooltip, menuContainer: "kw.Action.DatatableMoreMenu" }); // Add type specific handlers for common actions. kw.ActionRegistry.override(kw.Action.Edit, kw.Action.Datatable.EditSchema); kw.ActionRegistry.override(kw.Action.Edit, kw.Action.Datatable.EditEntryFromGrid); /* DataTableColumnModel.js */ (function() { Ext.namespace("kw.widget.datatable"); var _renderColumnFunctions = {}; var renderingColumnViewClass = {}; function _defaultRenderColumn(value, metadata, record, rowIndex, colIndex, store) { return Ext.util.Format.htmlEncode(value); } // Get static method defined on View class associated with widgetType. For example, // if widgetType == 'cma.kw.form.PlainText', then the associated renderer function is // cma.kw.form.PlainTextView.renderDataTableColumn. If the associated View class does not // define such a function, then the _defaultRenderColumn function defined above is used. function _getRenderColumnFunction(widgetType, isPrimaryColumn) { if (isPrimaryColumn) { var primColViewClass = _getRenderingViewClass(widgetType); if (primColViewClass != null && typeof(primColViewClass.renderAsDataTablePrimaryColumn) == 'function') { return primColViewClass.renderAsDataTablePrimaryColumn; } else { return _getRenderColumnFunction(widgetType, false); } } else if (!_renderColumnFunctions[widgetType]) { var viewClass = _getRenderingViewClass(widgetType); if (viewClass != null) { if (viewClass && typeof(viewClass.renderDataTableColumn) == 'function') _renderColumnFunctions[widgetType] = viewClass.renderDataTableColumn; else _renderColumnFunctions[widgetType] = _defaultRenderColumn; } else { _renderColumnFunctions[widgetType] = _defaultRenderColumn; } } return _renderColumnFunctions[widgetType]; } //kwc-8405 function _getRenderingViewClass(widgetType) { var cd = rcmp.ComponentRegistry.getComponentDefinition(widgetType); //kwc-7212, for automation testing, CStage needs to do print/render for non-implemented widgets if (cd != null) { if (!renderingColumnViewClass[widgetType]) { var ns = cd.getURLNameSpace(); var index = widgetType.lastIndexOf('.'); var baseClassPath = widgetType.substring(0, index); var viewClassName = widgetType.substring(index + 1) + 'View'; var url = rcmp.core.Environment.makeURL(ns, 'js/' + viewClassName + '.js'); rcmp.resource.ResourceLoader.loadJS(url); renderingColumnViewClass[widgetType] = kw.Util.evalDotPath(baseClassPath + '.' + viewClassName); } return renderingColumnViewClass[widgetType]; } return null; } /* * DataTableColumnModel * Base class for datatable entry column model */ kw.widget.datatable.DataTableColumnModel = Ext.extend(kw.widget.ItemListColumnModel, { constructor: function(listMetadata, context, columnHeaderHidden, prefSettings) { kw.widget.datatable.DataTableColumnModel.superclass.constructor.call(this, listMetadata, context, columnHeaderHidden, prefSettings); // For data table summary page, we want "r_creation_date" to be the last column & hidden. var colCount = this.getColumnCount(); var colIndex = this.getIndexById("r_creation_date"); if (colIndex != -1) { // Hide "r_creation_date" column if there is no hidden column preferences. if (this.prefSettings && this.prefSettings.hiddenColumnsPrefName && this.prefSettings.preferences && typeof(this.prefSettings.preferences[this.prefSettings.hiddenColumnsPrefName]) == 'undefined') this.setHidden(colIndex, true); // Move "r_creation_date" to the end if there is no column order preferences. var orderedColumns = null; if (this.prefSettings && this.prefSettings.orderedColumnsPrefName) orderedColumns = Ext.util.JSON.decode(this.prefSettings.preferences[this.prefSettings.orderedColumnsPrefName]); if ((orderedColumns == null) && (colIndex < colCount - 1)) { this.ignoreMoveEvent = true; // kwc-8702 -- avoid inadvertent creation of column order preference this.moveColumn(colIndex, colCount - 1); this.ignoreMoveEvent = false; } } this._primaryColId = null; var columnDefinitions = this.columnDefinitions = listMetadata.columnDefinition; var bSetDefaultWidths = (!prefSettings || !prefSettings.preferences || !prefSettings.preferences.ColumnsWidth); this.calculateTotalDefaultWidth(columnDefinitions); for (var i = 0; i < columnDefinitions.length; i++) { var colDef = columnDefinitions[i]; // A datatable column's type will be a widget ID for that column type var fieldId = colDef.renderType; if (fieldId && fieldId.indexOf("cma.kw.form.") != -1) { if (colDef.primary) this._primaryColId = colDef.columnName; colIndex = this.getIndexById(colDef.columnName); if (colIndex == -1) continue; // column not displayed; skip this.setRenderer(colIndex, _getRenderColumnFunction(fieldId, colDef.primary)); if (fieldId == "cma.kw.form.AutonumberField" || fieldId == "cma.kw.form.NumberField") this.config[colIndex].align = "right"; // if there's a defined default width for the current column type, use it. if (bSetDefaultWidths && colDef.multiValue && (defaultColumnWidths[fieldId].multi !== false)) { this.config[colIndex].width = defaultColumnWidths[fieldId].multi; } else if (bSetDefaultWidths && !colDef.multiValue && (defaultColumnWidths[fieldId].single !== false)) { this.config[colIndex].width = defaultColumnWidths[fieldId].single; } } } }, onColumnMoved: function() { if (!this.ignoreMoveEvent) kw.widget.datatable.DataTableColumnModel.superclass.onColumnMoved.apply(this, arguments); }, calculateTotalDefaultWidth: function(columnDefinitions) { var totalDefaultWidth = 0; if (!columnDefinitions) columnDefinitions = this.columnDefinitions; for (var i = 0; i < columnDefinitions.length; i++) { var colDef = columnDefinitions[i]; // A datatable column's type will be a widget ID for that column type var fieldId = colDef.renderType; if (fieldId && fieldId.indexOf("cma.kw.form.") != -1) { colIndex = this.getIndexById(colDef.columnName); if (colIndex == -1) continue; // column not displayed; skip // If we haven't recorded the default width for the column locally, get the // display config and initialize the local table. if (typeof defaultColumnWidths[fieldId] == "undefined") { defaultColumnWidths[fieldId] = {single: false, multi: false}; var dspcfg = kw.RcmpBinding.getDisplayConfig(fieldId); var cfgVal = dspcfg.attributes.defaultColumnWidth; if (cfgVal) { // if the display config defines both single and multi widths, the // widths (numbers) are separated by a comma in the attribute value. cfgVal = cfgVal.split(","); if (cfgVal.length == 1) { defaultColumnWidths[fieldId].single = parseInt(cfgVal); } else if (cfgVal.length == 2) { defaultColumnWidths[fieldId].single = parseInt(cfgVal[0]); defaultColumnWidths[fieldId].multi = parseInt(cfgVal[1]); } else kw.Util.debugHere("unexpected"); } } // if there's a defined default width for the current column type, use it. if (!isHidden.call(this, colDef)) { if (colDef.multiValue && (defaultColumnWidths[fieldId].multi !== false)) { totalDefaultWidth += defaultColumnWidths[fieldId].multi; } else if (!colDef.multiValue && (defaultColumnWidths[fieldId].single !== false)) { totalDefaultWidth += defaultColumnWidths[fieldId].single; } } } } this.totalDefaultWidth = totalDefaultWidth; kw.Util.debug("the dt grid width is ", totalDefaultWidth); return totalDefaultWidth; } }); var defaultColumnWidths = {}; function isHidden(colDef) { for (var colIndex in this.config) { cfgItem = this.config[colIndex]; if (cfgItem.id == colDef.columnName) { if (typeof (cfgItem.hidden) != "undefined") { return cfgItem.hidden; } break; } } return true; } })(); /* DatatableCreate.js */ rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DatatableLib.js"); kw.ScriptLoader.require("js/kw/Dialog/WizardBase.js"); kw.ScriptLoader.require("js/kw/widget/Literal.js"); kw.ScriptLoader.require("js/kw/widget/form/FieldPlugIn.js"); kw.ScriptLoader.require("js/kw/widget/form/Select.js"); kw.ScriptLoader.require("js/kw/widget/form/MultiValue.js"); kw.ScriptLoader.require("js/kw/widget/form/IconCombo.js"); kw.ScriptLoader.require("js/kw/widget/form/LiteralField.js"); kw.ScriptLoader.require("js/kw/widget/form/RichEdit.js"); Ext.namespace('kw.Dialog'); kw.Dialog.DatatableCreate = function(config) { if (typeof config == "undefined") config = {}; kw.ScriptLoader.requireStrings("DatatableCreate"); this.establishContext(config); // Load the dt templates this.templatesStore = new kw.data.Store({ proxy: new kw.data.DWRProxy(ListService.fetchResults), reader: new kw.data.ServiceResultsReader(), queryId: "active_datatable_templates", remoteSort: true, context: this.context }); this.categoriesStore = new Ext.data.SimpleStore({ fields: [ "a_template_category", "a_template_category_text"] }); // Create the XTemplates var categories_tpl = new Ext.XTemplate( '', '
', '{[this.enc(values.a_template_category_text)]}
', '
', { enc: function(value) { return kw.Util.retainWhiteSpaces(Ext.util.Format.htmlEncode(value)); } } ); var templates_tpl = new Ext.XTemplate( '', '
', '', '', '', '
' + '{[this.enc(this.truncateString(values.object_name,60))]}
{[this.enc(values.subject)]}
', '
', '
', { enc: function(value) { return Ext.util.Format.htmlEncode(value); }, getImgSrc: function(values) { var info = kw.Util.getImgUrlInfo(values._kw_icon,0); return info.url; }, truncateString : function(stringValue,length){ return Ext.util.Format.ellipsis(stringValue,length); } //KWC-3134 } ); //Create dataviews for DT templates & template categories this.categoriesView = new Ext.DataView({ cls: "kw-category-selector", store: this.categoriesStore, tpl: categories_tpl, autoHeight:true, singleSelect: true, itemSelector:'div.kw-category', emptyText: kw.Strings.NoImagesToDisplay, listeners: { selectionchange: { fn: function(dv, selections) { var index = dv.getSelectedIndexes(); var category = dv.store.getAt(index).data.a_template_category; function filter(record, id){ var a = false; if (record.get("a_template_category") === category) a = true; return a; } if (category == kw.Strings.Dialog.DatatableCreate.all) { this.templatesStore.filter('a_template_category', ""); } else { this.templatesStore.filterBy(filter, this); } // if we have items in the list and nothing is selected then we are going // to select the first item. if (this.templatesStore.getCount()>0 && this.templatesView.getSelectionCount()==0) { this.templatesView.select(0); } }, scope:this } } }) this.categoriesView.on("containerclick", this.onTemplateSelectorContainerClick, this); this.categoriesView.on("beforeclick", this.onTemplateSelectorBeforeClick, this); //use customized dataview class to support preview panel var templateConfig = { cls: "kw-template-selector", store: this.templatesStore, tpl: templates_tpl, autoHeight:true, singleSelect: true, itemSelector:'div.kw-template', emptyText: kw.Strings.NoImagesToDisplay }; templateConfig = kw.bubble.updateConfigForCreateFromTemplateDlg(templateConfig, config); this.templatesView = new kw.bubble.templateIconView(templateConfig); this.templatesView.on("containerclick", this.onTemplateSelectorContainerClick, this); this.templatesView.on("beforeclick", this.onTemplateSelectorBeforeClick, this); this.templatesView.on("selectionchange", this.onTemplateChange, this); var fieldSetConfig = { border: false, autoScroll:true, autoWidth:true, cls: "kw-page-choose-template" }; var card1Config = { items: [ {xtype: "label", html: "
" + kw.Strings.Dialog.DatatableCreate.step1of2 + "
" }, {xtype: "textfield", fieldLabel: kw.Strings.Dialog.DatatableCreate.dtname, name: "object_name", allowBlank: false, blankText: kw.Strings.Dialog.DatatableCreate.dtname_required_warning, validator: kw.Util.maxLengthByteValidator, regex: new RegExp("^[^\/]+$"), regexText: kw.Strings.Dialog.DatatableCreate.illegalCharErr, required:true, maxLength: 255, width: 492, plugins: new kw.widget.FieldPlugIn({helpText: kw.Strings.Dialog.DatatableCreate.uniquename})}, {xtype: "label", text: kw.Strings.Dialog.DatatableCreate.choosedttemplate, cls: "kw-choose-template-label"}, {xtype: "panel", cls: "kw-choose-template", border: false, width: 620, layout: "column",items: [this.categoriesView, this.templatesView]} ] }; Ext.apply(card1Config, fieldSetConfig); this._card1 = new Ext.form.FieldSet(card1Config); var card2Config = { items: [ {xtype: "label", html: "
" + kw.Strings.Dialog.DatatableCreate.step2of2 + "
" }, {xtype: "richedit", fieldLabel: kw.Strings.Dialog.DatatableCreate.welcomeMessage, anchor: kw.Dialog.defaults.anchor, name: "description", height: 120, plugins: new kw.widget.FieldPlugIn({helpText: kw.Strings.Dialog.DatatableCreate.descriptionHelptext})} ] }; var fieldSetConfig_Card2 = { border: false, autoScroll:true, autoWidth:true, cls: "kw-page-choose-template kw-page-choose-template-desc kw-dt-create-wizard" }; Ext.apply(card2Config, fieldSetConfig_Card2); this._card2 = new Ext.form.FieldSet(card2Config); Ext.applyIf(config, { title: kw.Strings.Dialog.DatatableCreate.title, height: 580, width: 659, minWidth: 659, autoFocus: true, cards: [this._card1, this._card2], finishButtonText: kw.Strings.Dialog.DatatableCreate.btnCreateDt }); kw.Dialog.DatatableCreate.superclass.constructor.call(this,config); }; // extend Ext.extend(kw.Dialog.DatatableCreate, kw.Dialog.WizardBase, { helpid: "cs_add_data_table", r_object_type: "dmc_room", initialize:function() { var _initcomplete=function(dataStore, records, options) { if (!records.length) { kw.ActionLib.displayError(kw.Strings.Dialog.DatatableCreate.noDtTemplateError); // Ext.Msg.alert(kw.Strings.Error.error, kw.Strings.Dialog.DatatableCreate.noDtTemplateError); return; } var myData = []; var map = {}; for (var i = 0, len = records.length; i < len; i++) { var template_category = records[i].data["a_template_category"]; if (template_category) template_category = template_category.trim(); if (!Ext.isEmpty(template_category)) { if (!map[template_category]) { map[template_category]=true; myData.push([template_category, Ext.util.Format.ellipsis(template_category,23)]); } } } myData.sort(kw.Util.caseInsentiveSort); myData.unshift([kw.Strings.Dialog.DatatableCreate.all, kw.Strings.Dialog.DatatableCreate.all]); this.categoriesStore.loadData(myData); kw.Dialog.DatatableCreate.superclass.initialize.call(this); if (this.categoriesView.store.data.length > 0) { // select the ALL categories this.categoriesView.select(0); } if (this.templatesView.store.data.length > 0) { this.templatesView.select(0); } }; // end handler var filter = new FilterInfo() filter.parameters = [{ name: "space_name", value: this.context.getSpaceContext().getSpaceProperties().get("object_name")//TODO ask dlm for best way to do this // dlm actionArgs.context.space }]; var storeLoadParams = {serviceMethodParams : new Object({ listQuery: {datalistId: "active_datatable_templates", repositories: [this.context.repository]}, filter:filter, sorting:null})}; this.templatesStore.on("load",_initcomplete,this); this.templatesStore.load({params:storeLoadParams}); }, onTemplateSelectorContainerClick : function(dv, e) { return false; }, onTemplateSelectorBeforeClick: function(dv, index, node, e) { if (index == dv.getSelectedIndexes()[0]) return false; return true; }, onTemplateChange: function(dataview, selections) { var records = dataview.getRecords(selections); if (records.length == 1) { var record = records[0]; } }, submit:function(){ var formContents = this._formpanel.getForm().getValues(); var selNode = this.templatesView.getSelectedNodes(); if (selNode.length == 0) { return; } this.progressDialogTitle = kw.Strings.Dialog.DatatableCreate.title; var msg = String.format(kw.Strings.Dialog.DatatableCreate.creatingDt, formContents.object_name); kw.Progress.ShowProgress(this,msg,this.progressDialogTitle); this.createDT(formContents); }, createDT: function(formContents) { var ctx = this.actionArgs.context; var selNode = this.templatesView.getSelectedNodes(); var templateId = new ObjectIdentity(); templateId.value = selNode[0].id; templateId.valueType = "OBJECT_ID"; templateId.repositoryName = ctx.repository; var objectLocation = new ObjectLocation(); if (typeof this.actionArgs.locationId != 'undefined') { objectLocation.objectIdentity = this.actionArgs.locationId; // Use user selected location if there is one. }else{ var meta; if (kw.Util.hasSelection(this.actionArgs)){ meta = this.actionArgs.selection.items[0].metadata; }else{ meta = this.context.getContextProperties(); } objectLocation.objectIdentity = new ObjectIdentity(); objectLocation.objectIdentity.repositoryName = ctx.repository; objectLocation.objectIdentity.valueType = "OBJECT_ID"; objectLocation.objectIdentity.value = meta.get("r_object_id"); } var props = new PropertySet(); props.object_name = formContents.object_name.trim(); props.folder_description = formContents.description; var templateLocation = Ext.DomQuery.selectNode('input[name=template_location]', selNode[0]).defaultValue; if (templateLocation.indexOf("/System/Applications/") != -1) this.viewMode = true; else this.viewMode = false; function _createcomplete(data) { this.handleResults(data.operationStatusSet, true /* throw summary error*/); // fire event var actionArgs=new kw.ActionArgs({ context: this.context, // context of where this happened metadata: { //dlm wrong type; don't bother r_object_type: meta.get('r_object_type'), r_object_id: data.operationStatusSet[0].objectId.value, r_parent_id: objectLocation.objectIdentity.value } }); kw.Events.publish(kw.EventNames.ItemCreated, actionArgs); var context=this.context.getContext(actionArgs.metadata); context.view = "content"; var newActionArgs = new kw.ActionArgs({context: context}); if(this.viewMode){ delete this._progress; // keep close() from removing progress kw.DatatableLib.EditSchema(newActionArgs); } else{ function localSuccess(result){ kw.RendEng.navigate(context); } function localFailure(result){ var body = kw.buildDialogBody(kw.Strings.Error.errorOccured, Ext.util.Format.htmlEncode(kw.Strings.Datatable.Lifecycle.lifecyclesNotFound)); var el = this.el; kw.MessageBox.show({ msg: body, buttons: {ok: kw.Strings.btnClose}, icon: Ext.MessageBox.ERROR, cls: 'kw-msg-alert', fn: function() { kw.DatatableLib.EditSchema(newActionArgs); } }, null); } var filter = new FilterInfo(); filter.parameters = [{ name: "datatable_id", value: newActionArgs.context.id }, { name:"space_id", value: newActionArgs.context.getSpaceId()}]; var queryParameters = new PropertySet(); var listQuery = new ListQuery().init('datatable_query', actionArgs.context.repository, queryParameters); queryParameters.space_id = actionArgs.context.getSpaceId(); queryParameters.datatable_id = newActionArgs.context.id; ListService.fetchMetadata(listQuery, filter, kw.getCallbackClosure(this, localSuccess, localFailure)); } this.close(); }; var callback = kw.getCallbackClosure(this, _createcomplete); TemplateService.instantiateTemplate(templateId, objectLocation, props, callback); } }); // end extend // DatatableExport.js /* * Copyright (c) 2010 EMC Corporation. All Rights Reserved. */ kw.ScriptLoader.require("js/kw/Dialog/DialogBase.js"); kw.ScriptLoader.require("js/kw/widget/Literal.js"); kw.ScriptLoader.require("js/kw/widget/form/LiteralField.js"); Ext.namespace('kw.Dialog'); kw.Dialog.DatatableExport = function(config) { kw.ScriptLoader.requireStrings("DatatableExport"); if (typeof config == "undefined") config = {}; this.establishContext(config); // Check if we have query Id & get entries count. this.searchQueryId = null; if (config.actionArgs.component) { var gridComp = kw.widget.PageControl.findPageAreaByClass(config.actionArgs.component, "kw-dt-grid-component", true); if (gridComp) { var queryId = gridComp._dataStore.getResultsCacheQueryId(); if (queryId.indexOf("queryId-") == 0) { this.searchQueryId = queryId; this.numEntries = gridComp._dataStore.totalFilterMatches; } else this.numEntries = gridComp._dataStore.totalLength; } } Ext.applyIf(config, { title: kw.Strings.Dialog.DatatableExport.title, height: 365, width: 500, minWidth: 500, buttons: [{text: kw.Strings.Dialog.DatatableExport.buttonExport, handler:this.submit, scope:this}, {text: kw.Strings.btnCancel, handler: this.cancel, scope:this}] }); kw.Dialog.DatatableExport.superclass.constructor.call(this,config); }; // extend Ext.extend(kw.Dialog.DatatableExport, kw.Dialog.DialogBase, { helpid: "cs_export_data_table_entries", initialize: function() { var hasRichText = false; var mappingFields = ""; if (this.context.getFields) { if (!kw.widget.PageControl.datatableWidgetList){ var actionArgs = new kw.ActionArgs({context: this.actionArgs.context, component: this.actionArgs.component}); var widgetCategories = []; widgetCategories.push("datatable"); widgetCategories.push("field"); kw.widget.PageControl.datatableWidgetList = kw.widget.PageControl.loadWidgetList(actionArgs, widgetCategories); } var metrics = Ext.util.TextMetrics.createInstance(document.body); var fieldTpl = "
{0}
{1}
" var fields = this.context.getFields(); for (var i = 0; i < fields.length; i++) { var field = fields[i]; var fieldType; // Shortcut: Instead of calling service to get data table fields, here we look for fields whose // names start with "column_" since data table field names always start with "column_". if (field.columnName.indexOf("column_") == 0) { var widgetsLen = kw.widget.PageControl.datatableWidgetList.length; for (var j = 0; j < widgetsLen; j++) { if (kw.widget.PageControl.datatableWidgetList[j][4]/*rcmp_sid*/ == field.renderType) { fieldType = kw.widget.PageControl.datatableWidgetList[j][2]; break; } } var colName = kw.Util.ellipsisByPixelWidth(metrics, field.columnLabel, 225, '...'); mappingFields += String.format(fieldTpl, colName, "(" + fieldType + ")"); } if (!hasRichText && (field.renderType == "cma.kw.form.RichText")) { hasRichText = true; } } } this.mappingFields =new Ext.Component({html: "
" + mappingFields + "
"}); this.useHTML = new Ext.form.Checkbox({ name: "useHTML", hiddenName: "useHTML", fieldLabel: "", hideLabel:true, labelSeparator:"", checked: hasRichText, boxLabel: kw.Strings.Dialog.DatatableExport.userHtml, hidden: !hasRichText}); var quotedName = "\"" + this.context.getContextProperties().get("object_name") + "\""; var numEntryExported = ""; if (this.numEntries == 1) numEntryExported = String.format(kw.Strings.Dialog.DatatableExport.numEntryExported, this.numEntries) else if ((this.numEntries == 0) || (this.numEntries > 1)){ if (this.numEntries == 150 && this.searchQueryId) numEntryExported = kw.Strings.Dialog.DatatableExport.filterCriteriaMsg; else numEntryExported = String.format(kw.Strings.Dialog.DatatableExport.numEntriesExported, this.numEntries) } this._formpanel = new kw.Dialog.FormPanel({ items: [ new kw.widget.form.LiteralField({hideLabel:true, labelSeparator: "", value: quotedName , cls: "kw-dt-import-file-name"}), {xtype: "literalfield", hideLabel:true, labelSeparator: "", value: kw.Strings.Dialog.DatatableExport.fieldsMapping, cls: "kw-form-text"}, this.mappingFields, new kw.widget.form.LiteralField({hideLabel:true, labelSeparator: "", cls: "kw-form-text", value: numEntryExported, hidden: (numEntryExported.length == 0)}), this.useHTML ] }); this.add(this._formpanel); this.doLayout(); kw.Dialog.DatatableExport.superclass.initialize.call(this); }, submit:function() { this.hide(); var params = ""; if (this.useHTML.getValue()) params = "?ishtml=true"; if (this.searchQueryId) { params += (params.length == 0) ? "?" : "&"; params += "queryid=" + this.searchQueryId; } var iframes = kw.Util.createIFrames([this.context.id]); var template = '/{0}/datatable-export/{1}/{2}{3}'; var content_url = String.format(template, kw.getAppName(), this.context.repository, this.context.id, params); var iframe = iframes[0]; iframe.src = content_url; iframe=null; this.close(); } }); // end extend /* DataTableGridComponent.js */ (function() { kw.ScriptLoader.require("js/kw/ItemViewComponent.js"); kw.ScriptLoader.require("js/kw/widget/form/MemberField.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DataTableColumnModel.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/DtSearchServiceResultsReader.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/RowControl.js"); kw.ScriptLoader.requireStrings("Datatable"); /** * The view for SummaryGrid widget. */ kw.widget.DataTableGridComponent = function(config) { config.serviceMethod = ListService.fetchResults; config.serviceMethodParams = { listQuery: { datalistId: "datatable_query", repositories: [config.context.repository], context:kw.Util.getListQueryContainerContext(config.tableId) }, filter:null, sorting:null}; if (Ext.isEmpty(config.tableId)) { this.loadOnConstruction = false; this.failToLoadMsg = kw.Strings.Error.notConfigured; this.bNotConfigured = true; } else { kw.widget.establishContextId(this, config.tableId, config); config.filterParameters = [{name: "datatable_id", value: config.tableId}, {name:"space_id", value: config.context.getSpaceId()}]; var repo = kw.getContext().repository; var tableIdentity = new ObjectIdentity(); tableIdentity.repositoryName = repo; tableIdentity.value = config.tableId; tableIdentity.valueType = "OBJECT_ID"; config.userPrefSettings = { objIdentity:tableIdentity, viewPrefName: "ViewMode", hiddenColumnsPrefName: "HiddenColumns", columnsWidthPrefName: "ColumnsWidth", orderedColumnsPrefName: "OrderedColumns", filterPrefName: "Filters", sortFieldPrefName:"DataTableSortField", sortOrderPrefName:"DataTableSortOrder" }; } Ext.applyIf(config, { datalistId: config.tableId, loadOnConstruction: this.loadOnConstruction, failToLoadMsg: this.failToLoadMsg }); var defaultConfig = { isWidget: true, toolbarName: "datatablegrid.toolbar", selectioncontextmenu: "datatablegrid.selection.contextmenu", backgroundcontextmenu: "datatablegrid.background.contextmenu", gridEventHandlers: kw.widget.GridEventHandlers.ItemListEventHandlers, iconView: false, imageFlowView: false, enableDrop: true, columnModel: kw.widget.datatable.DataTableColumnModel, enablePreview: false, defaultSort: {field: "r_creation_date", order: "ASC"} }; Ext.applyIf(config, defaultConfig); kw.widget.DataTableGridComponent.superclass.constructor.call(this, config); this.addClass("kw-dt-grid-component") rcmp.intf.attachInterfaces(this, kw.widget.DataTableGridComponent); this._grid.getView().on("rowsRendered", this.onRowsRendered, this); var exprSetFilters = this.getSearchFilters(); if (exprSetFilters) this.setupForSearchService(exprSetFilters, false); // When navigate from summary page to an entry page, // hand off of a store from a summary grid to the entry page. // Ownership of the store passes from the grid to the entry page, // and the lifetime of the store is then tied to the lifetime of the entry page. this._grid.preNavigate = function(rowContext) {rowContext.navData = {store: this.getStore()};}; }; Ext.extend(kw.widget.DataTableGridComponent, kw.ItemViewComponent, { initEvents: function() { kw.widget.DataTableGridComponent.superclass.initEvents.call(this); var pc = kw.widget.PageControl.getPageControlForWidget(this); if (pc) { pc.registerProvider("kw.component.IDataTableGrid", this); // Data table summary page isn't an editable page. // Return false for the pageeditmode event when the summary grid // is on the data table summary page. if (pc.context.getContextProperties().get("r_object_type") == "dmc_datatable") { pc.on("pageeditmode", function() {return false;}, this); } } function onHiddenChange() { this._grid.colModel.calculateTotalDefaultWidth(); this._grid.view.fitColumns(); } this._grid.colModel.on("hiddenchange", onHiddenChange, this); }, onRender: function() { kw.widget.DataTableGridComponent.superclass.onRender.apply(this, arguments); var store = this.getStore(); var thisTab = kw.RendEng.getTabManager().findTabComponentForNode(this.el.dom); store.tab = thisTab; thisTab.on("dtentrytreenav", this.onTreeNavToEntry, store); if (thisTab.events.dtentrytreenav.listeners.length > 1) kw.Util.debugHere("too many listeners"); store.on("beforedestroy", function() { thisTab.un("dtentrytreenav", kw.widget.DataTableGridComponent.prototype.onTreeNavToEntry, store); }); this.on("beforedestroy", function() { if (thisTab.fullContext) { if (!thisTab.fullContext.navData || (thisTab.fullContext.navData.store !== store)) { thisTab.un("dtentrytreenav", kw.widget.DataTableGridComponent.prototype.onTreeNavToEntry, store); } } }, this); }, // This is called when user clicks on DT entry in nav tree. ***NOTE***: this === store onTreeNavToEntry: function(entryId, entryIndex, parentId) { var store = this; var index = store.find("r_object_id", entryId); var rowControl = kw.widget.datatable.getRowControl(store.tab.el.dom); var newContext = new kw.Context(this.context); newContext.view = 'content'; newContext.tab = null; newContext.pgview = null; newContext.queryString = null; newContext.navData = {store: this}; newContext.id = entryId; if (index != -1) { if (rowControl && rowControl.dtStore) { rowControl.updateForNextPrevious(index); } else { kw.RendEng.navigate(newContext); } return true; } else if (rowControl && (entryIndex >= 0) && (this.context.id == parentId)) return rowControl.updateEntryByIndex(entryIndex); else if (!rowControl && (entryIndex >= 0) && (store.proxy.func === ListService.fetchResults)) { if (this.context.id != parentId) return false; var execOptions = store.lastOptions.params.serviceMethodParams.filter.execOptions; var pageSize = execOptions.maxResultCount; execOptions.startingIndex = Math.floor(entryIndex/pageSize) * pageSize; store.on("load", function() { var execOptions = this.lastOptions.params.serviceMethodParams.filter.execOptions; Ext.apply(kw.PagingToolbar.savedGridPageNumber, { url: this.context.getUrl(), objectId: this.context.id, datalistId: this.queryId, page: execOptions.startingIndex/execOptions.maxResultCount + 1, timestamp: new Date() }); newContext.navData = {store: store}; kw.RendEng.navigate(newContext); }, store, {single: true}); store.reload(); return true; } else return false; }, getGridViewConfig: function() { var config = kw.widget.DataTableGridComponent.superclass.getGridViewConfig.apply(this, arguments); config.xtype = "kwdtgrid"; return config; }, setupForListService : function(bReloadStore) { this._dataStore.proxy.func = ListService.fetchResults; this._dataStore.reader = new kw.widget.datatable.Reader(); delete this._dataStore.totalFilterMatches; delete this._dataStore.totalEntries; this._storeLoadParams = {start:0, limit:this.config.pageSize}; var filter = new FilterInfo(); filter.parameters = [{ name: "datatable_id", value: this.config.tableId }, { name:"space_id", value: this.config.context.getSpaceId()}]; filter.execOptions = new QueryExecution(); Ext.apply(filter.execOptions, {startingIndex:0, maxResultCount:this.config.pageSize}); this._storeLoadParams.serviceMethodParams = { listQuery: { datalistId: "datatable_query", repositories: [this.config.context.repository], context:kw.Util.getListQueryContainerContext(this.config.tableId) }, filter:filter, sorting:null}; if (bReloadStore) { this._dataStore.reload({params:this._storeLoadParams}); var prefSettings = this.config.userPrefSettings; var prefNameValuePairs = new Object(); prefNameValuePairs[prefSettings.filterPrefName] = ""; kw.Util.savePreferences(prefSettings, prefNameValuePairs); kw.Events.publish(kw.EventNames.DtNoSearchFilter, { datatableId: this.config.tableId }); kw.Events.publish(kw.EventNames.DtSearchFilterPrint, { searchFilterStrExp: this.getSearchFilterExpStr() }); } }, setupForSearchService : function(exprSetFilters, bReloadStore) { if (!exprSetFilters || exprSetFilters.length == 0) { this.setupForListService(bReloadStore); return; } this._dataStore.proxy.func = SearchService.search; this._dataStore.reader = new kw.data.DtSearchServiceResultsReader(); this._storeLoadParams = {start:0, limit:this.config.pageSize}; var filter = new FilterInfo(); filter.parameters = [{name: "datatable_id", value: this.config.tableId}, {name:"space_id", value: this.config.context.getSpaceId()}]; filter.execOptions = new QueryExecution(); Ext.apply(filter.execOptions, {startingIndex:0, maxResultCount:this.config.pageSize, maxResultPerSource: 150}); var rowTypeName = this.context.getContextProperties().get("_kw_row_type_name"); var query = new UserQuery(); var repository = this.context.repository; query.metaDataRepository = repository; query.repositories = [repository]; query.objectType = rowTypeName; query.exprSetFilters = exprSetFilters; this._storeLoadParams.serviceMethodParams = new Object({datalistId: "datatable_search", query: query, filter:filter, sorting:null}); if (bReloadStore) { this._dataStore.reload({params:this._storeLoadParams}); var prefSettings = this.config.userPrefSettings; var prefNameValuePairs = new Object(); prefNameValuePairs[prefSettings.filterPrefName] = Ext.util.JSON.encode(exprSetFilters); kw.Util.savePreferences(prefSettings, prefNameValuePairs); } }, getSearchFilters : function() { var exprSetFilters; var prefSettings = this.config.userPrefSettings; if (prefSettings) { kw.Util.getPreferences(prefSettings); var filterEncodeStr = prefSettings.preferences[prefSettings.filterPrefName]; if (filterEncodeStr) exprSetFilters = Ext.util.JSON.decode(filterEncodeStr); } this.removeObsoleteSearchFilters(exprSetFilters); return exprSetFilters; }, getSearchFilterExpStr: function() { var colFilters = this.getColumnFilters(); if(!colFilters.length > 0) { return this.getFullTextFilterVal(); } var generateSearchFilterExpStr = function(columnFilters, filterExpString) { for (var y=0; y=0; z--) { if (columnFilterExpressions[z].expressions) { removeObsoleteColumn(columnFilterExpressions[z].expressions, columnId); if (columnFilterExpressions[z].expressions.length == 0) columnFilterExpressions.splice(z, 1); } else { if (columnId == columnFilterExpressions[z].property) { columnFilterExpressions.splice(z, 1); } } } } for (var i=0; i 0) { records = records.records; sortMemberListColumnNameValues.call(this, records, columnDefinition); } } }, */ onRowsRendered: function() { var pageControl = kw.widget.PageControl.getPageControlForWidget(this); if (pageControl) { var context = pageControl.context; if (context.getContextProperties().getMetaType() == kw.MetaType.ROW) { var rowObjId = context.id; this.selectRow(rowObjId); } } }, preNavigate: function(rowContext) { // When navigate from summary page to an entry page, // hand off of a store from a summary grid to the entry page. // Ownership of the store passes from the grid to the entry page, // and the lifetime of the store is then tied to the lifetime of the entry page. this._grid.preNavigate(rowContext); }, /// kw.component.IWidget /// getTitle: function() { if (this.initialConfig.title == kw.Strings.WidgetNoTitleBar) return ""; if (this.initialConfig.title) return Ext.util.Format.htmlEncode(this.initialConfig.title); else return ""; //kwc-6999 }, onSelect: function() { if (this.bNotConfigured || this.bContentUnavailable) return; this.displayWidgetToolbar(); }, onDeselect: function() {}, onPageEdit: function() {}, onPageSave: function() {}, onPageEditCancel: function() {}, onRemoveWidget: function() {}, canUpdateSelf: function() { return false; }, onUpdate: function() {}, /// end kw.component.IWidget /// // kw.component.IDataTableGrid onStoreEvent: function(evt, fn, scope, args, bRemove) { if (bRemove) { this._dataStore.un(evt, fn, scope); } else { this._dataStore.on(evt, fn, scope, args); } }, onGridEvent: function(evt, fn, scope, args, bRemove) { var target = this._grid; if ((evt == "rowselect") || (evt == "selectionchange")) target = this._grid. getSelectionModel(); if (bRemove) { target.un(evt, fn, scope); } else { target.on(evt, fn, scope, args); } }, selectRow: function(arg) { if ((typeof arg == "object") && arg.id) { return this.selectRow(arg.id) } else if (typeof arg == "string") { var store = this._grid.store; var n = store.getCount(); for (var i=0; i < n; ++i) { var rec = store.getAt(i); if ((rec._dt_objectIdentity.valueType == "OBJECT_ID") && (rec._dt_objectIdentity.value == arg)) { this._grid.getSelectionModel().selectRow(i, false); this._grid.getView().focusRow(i); return true; } } } return false; }, getColumnTitle: function(dataIndex) { var col = this._grid.getColumnModel(). getColumnById(dataIndex); if (!col) kw.Util.debugHere("col not found"); return col.header; } // end kw.component.IDataTableGrid }); kw.widget.datatable.Grid = function(config) { kw.widget.datatable.Grid.superclass.constructor.apply(this, arguments); }; Ext.extend(kw.widget.datatable.Grid, kw.widget.Grid, { onResize: function() { kw.widget.datatable.Grid.superclass.onResize.apply(this, arguments); if(this.viewReady){ this.view.layout(); } }, getGridView: function() { return new kw.widget.datatable.GridView({forceFit:true, rowIsTabStop: this.config.rowIsTabStop}); } }); Ext.reg("kwdtgrid", kw.widget.datatable.Grid); kw.widget.datatable.GridView = function(config) { config.rowSelectorDepth = 0;//KWC-17850 kw.widget.datatable.GridView.superclass.constructor.apply(this, arguments); }; Ext.extend(kw.widget.datatable.GridView, kw.widget.GridView, { fitColumns: function(preventRefresh, onlyExpand, omitColumn) { var cm = this.cm, i; var tw = cm.totalDefaultWidth; var inner = this.grid.findParentBy(function(c) { return c.el.hasClass("kw-dt-content-area");} ); var outer = inner.ownerCt; var aw = outer.getWidth(true)-this.getScrollOffset(); if (tw > aw) { outer.getLayoutTarget().applyStyles({"overflow-x": "auto"}); inner.setWidth(tw); this.grid.ownerCt.setWidth(tw); this.grid.setWidth(tw); this.gridWidthAdjusted = true; } else if (this.gridWidthAdjusted) { outer.getLayoutTarget().applyStyles({"overflow-x": "hidden"}); var auto = "auto"; inner.setWidth(auto); this.grid.ownerCt.setWidth(auto); this.grid.setWidth(auto); this.gridWidthAdjusted = false; } return kw.widget.datatable.GridView.superclass.fitColumns.call(this, preventRefresh, onlyExpand, omitColumn); } }); kw.widget.datatable.Reader = Ext.extend(kw.data.ServiceResultsReader, { read: function(params, results) { var retVal = kw.widget.datatable.Reader.superclass.read.apply(this, arguments); if (params.datalistId && results.metaData) { kw.data.setQueryMetadata(params.datalistId, results.metaData);// kwc-19131 } return retVal; } }); rcmp.intf.implementInterface(kw.widget.DataTableGridComponent, "kw.component.IRowDataSource"); rcmp.intf.implementInterface(kw.widget.DataTableGridComponent, "kw.component.IDataTableGrid"); rcmp.intf.implementInterface(kw.widget.DataTableGridComponent, "kw.component.IWidget"); Ext.namespace("kw.debug"); kw.debug.DatatableGridComponent = function() {eval("debugger");}; })(); // DatatableImport.js /* * Copyright (c) 2009 EMC Corporation. All Rights Reserved. */ kw.ScriptLoader.require("js/kw/Dialog/WizardBase.js"); kw.ScriptLoader.require("js/kw/widget/Literal.js"); kw.ScriptLoader.require("js/kw/widget/form/FieldPlugIn.js"); kw.ScriptLoader.require("js/kw/widget/form/LiteralField.js"); Ext.namespace('kw.Dialog'); kw.Dialog.DatatableImport = function(config) { if (typeof config == "undefined") config = {}; kw.ScriptLoader.requireStrings("DatatableImport"); this.establishContext(config); this.filechooser_ctrl = new Ext.form.FileUploadField( { buttonText: kw.Strings.Dialog.DatatableImport.browseButtonText, fieldLabel: kw.Strings.Dialog.DatatableImport.chooseFile, width: 280, name: "dtimportfile", allowBlank: false, listeners: { 'fileselected': { fn: this.onFileChange, scope: this, single: false } } }); var card1Config = { labelWidth: 150, items: [this.filechooser_ctrl] }; this._card1 = new Ext.form.FieldSet(card1Config); this.importFileName = new kw.widget.form.LiteralField({ hideLabel:true, labelSeparator: "", cls: "kw-dt-import-file-name"}); this.mappingFields = new Ext.Component({html: "
"}); this.numOfEntries = new kw.widget.form.LiteralField({hideLabel:true, labelSeparator: ""}) this.useHTML = new Ext.form.Checkbox({ name: "useHTML", hiddenName: "useHTML", fieldLabel: "", hideLabel:true, labelSeparator:"", checked: true, boxLabel: kw.Strings.Dialog.DatatableImport.useHTML, cls: "x-form-cb-label"}); var card2Config = { items: [ this.importFileName, {xtype: "literalfield", hideLabel:true, labelSeparator: "", value: kw.Strings.Dialog.DatatableImport.mapFields, cls: "kw-form-text"}, this.mappingFields, this.numOfEntries, this.useHTML ] }; this._card2 = new Ext.form.FieldSet(card2Config); Ext.applyIf(config, { title: kw.Strings.Dialog.DatatableImport.title, height: 425, width: 500, minWidth: 500, autoFocus: true, displayStepInfo: true, cards: [this._card1, this._card2], finishButtonText: kw.Strings.Dialog.DatatableImport.btnImport, formCfg: {method: 'POST', fileUpload: true, url: String.format('/{0}/{1}', kw.getAppName(), kw.getTempFileFolderName()), // IE and Safari need this, but FF apparently does not. // In any case, it is apparently never called. errorReader: (Ext.isIE || Ext.isSafari || Ext.isChrome || Ext.isGecko) ? new Ext.data.XmlReader({record: "/dummy"}, Ext.data.Record.create([{name: 'dummy'}])) : undefined } }); kw.Dialog.DatatableImport.superclass.constructor.call(this,config); }; // extend Ext.extend(kw.Dialog.DatatableImport, kw.Dialog.WizardBase, { helpid: "cs_import_data_table_entries", onFileChange: function() { this.fileChanged = true; }, _onNext: function() { if (this.fileChanged) { var msg = String.format(kw.Strings.Dialog.DatatableImport.getPreviewMsg,this.filechooser_ctrl.getValue()); kw.Progress.ShowProgress(this, msg, ""); var options = { scope: this, success: this.onUploadSuccess, failure: this.onUploadFailure, clientValidation: false }; this._formpanel.getForm().submit(options); } else { kw.Dialog.DatatableImport.superclass._onNext.call(this); } }, onUploadSuccess: function(form,action) { var i1; var fileUrl = action.response.responseText; if (fileUrl.indexOf("
") == 0 || fileUrl.indexOf("
") == 0)
        {
            i1 = fileUrl.indexOf("
"); if (i1 == -1) i1 = fileUrl.indexOf("
"); fileUrl = fileUrl.substring(5,i1); } i1 = fileUrl.indexOf("file-cache"); if (i1 != -1) fileUrl = fileUrl.substring(i1); if (Ext.isChrome) { i1 = fileUrl.indexOf(""); if (i1 == -1) i1 = fileUrl.indexOf(""); fileUrl = fileUrl.substring(0,i1); } this.dtObjIdentity = this.actionArgs.context.getObjectIdentity(); this.fileContent = new FileContent().init(fileUrl, 0); var callbacks = kw.getCallbackClosure(this, this.onGetImportPreviewSuccess, this.onGetImportPreviewFailure); callbacks.async=false; DataTableImportService.getImportPreview(this.dtObjIdentity, this.fileContent, callbacks) }, onUploadFailure: function(form,action) { // this is called only if there was an HTTP transport error kw.Progress.EndProgress(this); kw.MessageBox.show( { title: kw.Strings.Dialog.DatatableImport.title, buttons: Ext.MessageBox.OK, icon: this.errorIcon, msg: String.format(kw.Strings.Dialog.DatatableImport.submitFailure, Ext.form.Action.CONNECT_FAILURE) }); }, onGetImportPreviewSuccess: function(preview) { this.initializeWithPreviewInfo(preview); kw.Progress.EndProgress(this); this.fileChanged = false; kw.Dialog.DatatableImport.superclass._onNext.call(this); }, initializeWithPreviewInfo : function(preview) { this.importFileName.setValue('"' + this.filechooser_ctrl.getValue() + '"'); var mappingFields = ""; if (!kw.widget.PageControl.datatableWidgetList){ var actionArgs = new kw.ActionArgs({context: this.actionArgs.context, component: this.actionArgs.component}); var widgetCategories = []; widgetCategories.push("datatable"); widgetCategories.push("field"); kw.widget.PageControl.datatableWidgetList = kw.widget.PageControl.loadWidgetList(actionArgs, widgetCategories); } var fieldTpl = "
{0}
{1}
" var metrics = Ext.util.TextMetrics.createInstance(this.el); this.hasRichTextField = false; for (var i=0, len=preview.importColumns.length; i 1 || preview.entryCount == 0) { entryText = kw.Strings.Dialog.DatatableImport.entries; } this.numOfEntries.setValue(String.format(entryText,preview.entryCount));//kwc-17831 if (this.hasRichTextField) this.useHTML.show(); else this.useHTML.hide(); }, onGetImportPreviewFailure: function(excName, excObj) { kw.Progress.EndProgress(this); Ext.Msg.alert(kw.Strings.Error.error, excObj.cause.localizedMessage); }, submit:function(){ var _complete=function(data) { var status=kw.Service.Util.getOpStatus(data); if (status.errorCount>0) this.handleResults(data.operationStatusSet, true /* throw summary error*/); var actionArgs=new kw.ActionArgs({ context: this.actionArgs.context, notification: String.format(kw.Strings.Dialog.DatatableImport.importSuccessful, this.importFileName) }); var res=kw.Util.getProgressRes(kw.Strings.Progress.Import, 1, this.importFileName); kw.AsyncServiceMgr.get().handleOpStatus(data, res, {fn:this.onImportFileSuccess, scope:this, args:[actionArgs]}); this.close(); }; this.importFileName = this.filechooser_ctrl.getValue(); var profile = new ImportProfile(); profile.richtextIsHtml = this.useHTML.getValue(); var callbacks = kw.getCallbackClosure(this, _complete); DataTableImportService.importRows(this.dtObjIdentity, this.fileContent, profile, callbacks) this.close(); }, onImportFileSuccess: function(data, actionArgs) { kw.Events.publish(kw.EventNames.DtImportCompleted, actionArgs); kw.Events.publish(kw.EventNames.ContainerChanged, actionArgs); } }); // end extend /* DtFilter.js */ kw.ScriptLoader.require("js/kw/SchemaControlFactory.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/TextSearchField.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/NumberSearchField.js"); rcmp.resource.SharedLibraryResourceLoader.loadJS("cma.kw.datatable.sharedlib","js/MemberSearchField.js"); Ext.namespace('kw.widget.datatable'); kw.widget.datatable.SearchTool = function(config) { var summaryGrid = config.actionArgs.component; if (summaryGrid.isAdvFiltersInEffect()) { config.emptyText = kw.Strings.Action.Pro.Datatable.Filter._advFiltersInEffect; } else { config.emptyText = kw.Strings.Action.Pro.Datatable.Filter._emptyText; config.value = config.actionArgs.component.getFullTextFilterVal(); } kw.widget.datatable.SearchTool.superclass.constructor.call(this, config); this.subscription = kw.Events.subscribe(kw.EventNames.DtNoSearchFilter, this.onClear, this); this.on('specialkey', function(f, e){ if(e.getKey() == e.ENTER){ e.stopEvent(); this.onTrigger1Click(); } }, this); }; kw.widget.datatable.SearchTool.setupFullTextFilter = function(summaryGrid, exprSetFilters, fullTextVal) { var fullTextFilter = null; if (exprSetFilters) { for (var i=0, len=exprSetFilters.length; i"; this.setText(msg); this.show(); }, onUpdate : function(eventName, data) { var summaryGrid = this.actionArgs.component; if (summaryGrid.context.id != data.datatableId) return; this.setFilterStatus(data.totalFilterMatches, data.totalEntries, data.hasMoreResults); Ext.apply(summaryGrid._dataStore, {totalFilterMatches: data.totalFilterMatches, totalEntries: data.totalEntries, hasMoreResults: data.hasMoreResults}); kw.Events.publish(kw.EventNames.DtSearchFilterPrint, { searchFilterStrExp: summaryGrid.getSearchFilterExpStr() }); }, onClearFilter : function(eventName, data) { if (this.actionArgs.component.context.id != data.datatableId) return; this.hide(); }, onDestroy : function() { for (var i=0, len=this.subscriptions.length; i